leetcode-py-sdk 1.0.3__tar.gz → 1.0.5__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.5/PKG-INFO +137 -0
- leetcode_py_sdk-1.0.5/README.md +98 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/pyproject.toml +2 -2
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/pyproject.toml.orig +2 -2
- leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/integer_to_roman.json +98 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/shortest_path_in_binary_matrix.json +19 -5
- leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/shortest_path_to_get_food.json +100 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/walls_and_gates.json +2 -2
- leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/zigzag_conversion.json +98 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +51 -5
- leetcode_py_sdk-1.0.3/PKG-INFO +0 -371
- leetcode_py_sdk-1.0.3/README.md +0 -332
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/gen.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/list.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/scrape.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/main.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/accounts_merge.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/add_binary.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/add_two_numbers.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/alien_dictionary.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/all_nodes_distance_k_in_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/asteroid_collision.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/backspace_string_compare.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/balanced_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/baseball_game.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/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.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_search.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_inorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_level_order_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_maximum_path_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_postorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_preorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_right_side_view.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_zigzag_level_order_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/bitwise_and_of_numbers_range.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/boats_to_save_people.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/build_a_matrix_with_conditions.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/burst_balloons.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/bus_routes.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/candy.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/capacity_to_ship_packages_within_d_days.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/car_fleet.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/car_pooling.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/cheapest_flights_within_k_stops.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/climbing_stairs.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/clone_graph.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_iv.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/combinations.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/concatenation_of_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_binary_tree_from_preorder_and_inorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_quad_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/container_with_most_water.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/contiguous_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/convert_sorted_array_to_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/copy_list_with_random_pointer.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/count_good_nodes_in_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/counting_bits.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_iv.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/daily_temperatures.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_ways.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/delete_leaves_with_a_given_value.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/delete_node_in_a_bst.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_add_and_search_words_data_structure.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_circular_queue.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hash_map.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hash_set.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hit_counter.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_in_memory_file_system.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/design_twitter.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/detect_squares.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/diagonal_traverse.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/diameter_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/distinct_subsequences.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/dota2_senate.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/employee_free_time.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/encode_and_decode_strings.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_division.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_reverse_polish_notation.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/excel_sheet_column_title.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/extra_characters_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_all_anagrams_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/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.3 → leetcode_py_sdk-1.0.5}/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.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_in_mountain_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_k_closest_elements.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_median_from_data_stream.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_minimum_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_duplicate_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_town_judge.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/first_bad_version.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/first_missing_positive.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/flood_fill.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/four_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/gas_station.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/gcd_of_strings.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/generate_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/graph_valid_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/greatest_common_divisor_traversal.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/group_anagrams.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/guess_number_higher_or_lower.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/hand_of_straights.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/happy_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_iii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_queue_using_stacks.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_stack_using_queues.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_trie_prefix_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/inorder_successor_in_bst.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_delete_getrandom_o1.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_greatest_common_divisors_in_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_interval.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_into_a_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/integer_break.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/invert_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/ipo.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/is_graph_bipartite.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/is_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/island_perimeter.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_vii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/k_closest_points_to_origin.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/koko_eating_bananas.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_largest_element_in_a_stream.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_largest_element_in_an_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_smallest_element_in_a_bst.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_rectangle_in_histogram.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/last_stone_weight.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/last_stone_weight_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/lemonade_change.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/letter_combinations_of_a_phone_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/lfu_cache.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_prefix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_consecutive_sequence.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_happy_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_path_in_a_matrix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindrome.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindromic_substring.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_repeating_character_replacement.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_substring_without_repeating_characters.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_turbulent_subarray.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_valid_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/lru_cache.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/matchsticks_to_square.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/max_area_of_island.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/max_points_on_a_line.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximal_square.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_depth_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_frequency_stack.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_product_subarray.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_profit_in_job_scheduling.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_subarray.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_sum_circular_subarray.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_width_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/median_of_two_sorted_arrays.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_iii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_intervals.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_k_sorted_lists.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_strings_alternately.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_triplets_to_form_target_triplet.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_two_sorted_lists.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/middle_of_the_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_climbing_stairs.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_to_connect_all_points.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/min_stack.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_array_end.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_height_trees.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_interval_to_include_each_query.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_knight_moves.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_path_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_size_subarray_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_window_substring.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/missing_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/move_zeroes.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/my_calendar_i.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/n_th_tribonacci_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/network_delay_time.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/next_permutation.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/non_overlapping_intervals.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_1_bits.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_connected_components_in_an_undirected_graph.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_islands.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_provinces.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/odd_even_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/online_stock_span.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/open_the_lock.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/pacific_atlantic_water_flow.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_pairs.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_partitioning.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/palindromic_substrings.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_equal_subset_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_labels.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_to_k_equal_sum_subsets.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_iii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/path_with_minimum_effort.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/perfect_squares.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/permutation_in_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/plus_one.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/powx_n.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/product_of_array_except_self.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/random_pick_with_weight.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/range_sum_query_2d_immutable.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/ransom_note.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reconstruct_itinerary.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/redundant_connection.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/regular_expression_matching.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_duplicates_from_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_element.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_nth_node_from_end_of_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reorder_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reorganize_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_bits.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_integer.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_nodes_in_k_group.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_words_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/roman_to_integer.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_image.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/rotting_oranges.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/same_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/search_a_2d_matrix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/search_insert_position.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/serialize_and_deserialize_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/set_matrix_zeroes.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/simplify_path.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number_iii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/single_threaded_cpu.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sliding_window_maximum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/smallest_range_covering_elements_from_k_lists.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_an_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_colors.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_list.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/spiral_matrix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/split_array_largest_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sqrtx.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/squares_of_a_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game_iii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/string_to_integer_atoi.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/subarray_sum_equals_k.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/subtree_of_another_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sudoku_solver.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_all_subset_xor_totals.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_two_integers.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/surrounded_regions.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/swap_nodes_in_pairs.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/swim_in_rising_water.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/symmetric_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/target_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/task_scheduler.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum_closest.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/time_based_key_value_store.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_elements.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_words.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/transpose_matrix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/trapping_rain_water.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum_ii_input_array_is_sorted.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_anagram.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parenthesis_string.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_sudoku.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/validate_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/verifying_an_alien_dictionary.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/word_ladder.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search_ii.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/zero_one_matrix.json +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/README.md +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/helpers.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/playground.ipynb +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/solution.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/test_solution.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/resources.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/_utils.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/dict_tree.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/graph_node.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/list_node.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/tree_node.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/py.typed +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/__init__.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/check_test_cases.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/generator.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/logged_test.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/parser.py +0 -0
- {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/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.5
|
|
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).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "leetcode-py-sdk"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.5"
|
|
4
4
|
description = "Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -71,7 +71,7 @@ dev = [
|
|
|
71
71
|
]
|
|
72
72
|
|
|
73
73
|
[build-system]
|
|
74
|
-
requires = ["uv_build>=0.
|
|
74
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
75
75
|
build-backend = "uv_build"
|
|
76
76
|
|
|
77
77
|
[tool.coverage.run]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "leetcode-py-sdk"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.5" # 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"}
|
|
@@ -62,7 +62,7 @@ dev = [
|
|
|
62
62
|
]
|
|
63
63
|
|
|
64
64
|
[build-system]
|
|
65
|
-
requires = ["uv_build>=0.
|
|
65
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
66
66
|
build-backend = "uv_build"
|
|
67
67
|
|
|
68
68
|
[tool.coverage.run]
|
leetcode_py_sdk-1.0.5/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",
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "shortest_path_to_get_food",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "1730",
|
|
5
|
+
"problem_title": "Shortest Path to Get Food",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "Array, Breadth-First Search, Matrix",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["grind"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "You are starving and you want to eat food as quickly as possible. You want to find the shortest path to arrive at any food cell.\n\nYou are given an `m x n` character matrix, `grid`, of these different types of cells:\n\n- `'*'` is your location. There is exactly one `'*'` cell.\n- `'#'` is a food cell. There may be multiple food cells.\n- `'O'` is free space, and you can travel through these cells.\n- `'X'` is an obstacle, and you cannot travel through these cells.\n\nYou can travel to any adjacent cell north, east, south, or west of your current location if there is not an obstacle.\n\nReturn the length of the shortest path for you to reach any food cell. If there is no path for you to reach food, return `-1`.",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: grid = [[\"X\",\"X\",\"X\",\"X\",\"X\",\"X\"],[\"X\",\"*\",\"O\",\"O\",\"O\",\"X\"],[\"X\",\"O\",\"O\",\"#\",\"O\",\"X\"],[\"X\",\"X\",\"X\",\"X\",\"X\",\"X\"]]\nOutput: 3\nExplanation: It takes 3 steps to reach the food.\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: grid = [[\"X\",\"X\",\"X\",\"X\",\"X\"],[\"X\",\"*\",\"X\",\"O\",\"X\"],[\"X\",\"O\",\"X\",\"#\",\"X\"],[\"X\",\"X\",\"X\",\"X\",\"X\"]]\nOutput: -1\nExplanation: It is not possible to reach the food.\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "```\nInput: grid = [[\"X\",\"X\",\"X\",\"X\",\"X\",\"X\",\"X\",\"X\"],[\"X\",\"*\",\"O\",\"X\",\"O\",\"#\",\"O\",\"X\"],[\"X\",\"O\",\"O\",\"X\",\"O\",\"O\",\"X\",\"X\"],[\"X\",\"O\",\"O\",\"O\",\"O\",\"#\",\"O\",\"X\"],[\"X\",\"X\",\"X\",\"X\",\"X\",\"X\",\"X\",\"X\"]]\nOutput: 6\nExplanation: There can be multiple food cells. It only takes 6 steps to reach the bottom food.\n```"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"content": "```\nInput: grid = [[\"O\",\"*\"],[\"#\",\"O\"]]\nOutput: 2\n```"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"readme_constraints": "- `m == grid.length`\n- `n == grid[i].length`\n- `1 <= m, n <= 200`\n- `grid[row][col]` is `'*'`, `'X'`, `'O'`, or `'#'`.\n- The `grid` contains exactly one `'*'`.",
|
|
29
|
+
"readme_additional": "",
|
|
30
|
+
"helpers_imports": "",
|
|
31
|
+
"helpers_content": "",
|
|
32
|
+
"helpers_run_name": "get_food",
|
|
33
|
+
"helpers_run_signature": "(solution_class: type, grid: list[list[str]])",
|
|
34
|
+
"helpers_run_body": " import copy\n grid_copy = copy.deepcopy(grid)\n implementation = solution_class()\n return implementation.get_food(grid_copy)",
|
|
35
|
+
"helpers_assert_name": "get_food",
|
|
36
|
+
"helpers_assert_signature": "(result: int, expected: int) -> bool",
|
|
37
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
38
|
+
"solution_imports": "",
|
|
39
|
+
"solution_contents": "",
|
|
40
|
+
"solution_class_content": "",
|
|
41
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_get_food, run_get_food\nfrom .solution import Solution",
|
|
42
|
+
"test_content": "",
|
|
43
|
+
"test_class_name": "ShortestPathToGetFood",
|
|
44
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
45
|
+
"_solution_methods": {
|
|
46
|
+
"list": [
|
|
47
|
+
{
|
|
48
|
+
"name": "get_food",
|
|
49
|
+
"signature": "(self, grid: list[list[str]]) -> int",
|
|
50
|
+
"body": " # TODO: Implement get_food\n return 0"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"_test_helper_methods": {
|
|
55
|
+
"list": [
|
|
56
|
+
{
|
|
57
|
+
"name": "setup_method",
|
|
58
|
+
"parameters": "",
|
|
59
|
+
"body": "self.solution = Solution()"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"_test_methods": {
|
|
64
|
+
"list": [
|
|
65
|
+
{
|
|
66
|
+
"name": "test_get_food",
|
|
67
|
+
"signature": "(self, grid: list[list[str]], expected: int)",
|
|
68
|
+
"parametrize": "grid, expected",
|
|
69
|
+
"test_cases": {
|
|
70
|
+
"list": [
|
|
71
|
+
"([['X','X','X','X','X','X'],['X','*','O','O','O','X'],['X','O','O','#','O','X'],['X','X','X','X','X','X']], 3)",
|
|
72
|
+
"([['X','X','X','X','X'],['X','*','X','O','X'],['X','O','X','#','X'],['X','X','X','X','X']], -1)",
|
|
73
|
+
"([['X','X','X','X','X','X','X','X'],['X','*','O','X','O','#','O','X'],['X','O','O','X','O','O','X','X'],['X','O','O','O','O','#','O','X'],['X','X','X','X','X','X','X','X']], 6)",
|
|
74
|
+
"([['O','*'],['#','O']], 2)",
|
|
75
|
+
"([['X','*'],['#','X']], -1)",
|
|
76
|
+
"([['*','#']], 1)",
|
|
77
|
+
"([['#','*']], 1)",
|
|
78
|
+
"([['*','O','#']], 2)",
|
|
79
|
+
"([['*','X','#']], -1)",
|
|
80
|
+
"([['*']], -1)",
|
|
81
|
+
"([['*','O','O','O','O','O','O','#']], 7)",
|
|
82
|
+
"([['*'],['O'],['O'],['#']], 3)",
|
|
83
|
+
"([['O','O','*','O','O'],['O','X','X','X','O'],['O','O','#','O','O']], 6)",
|
|
84
|
+
"([['O','*','O'],['O','X','O'],['#','O','#']], 3)",
|
|
85
|
+
"([['*','O','O'],['X','X','O'],['O','O','#']], 4)",
|
|
86
|
+
"([['#','X','*'],['O','X','O'],['O','O','#']], 2)",
|
|
87
|
+
"([['X','*','X'],['X','O','X'],['X','#','X']], 2)",
|
|
88
|
+
"([['*','O','O','O'],['O','X','X','O'],['O','X','#','O'],['O','O','O','O']], 6)",
|
|
89
|
+
"([['*','O','O'],['X','X','O'],['O','O','O'],['O','X','#']], 5)"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"body": " result = run_get_food(Solution, grid)\n assert_get_food(result, expected)"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"playground_imports": "from helpers import run_get_food, assert_get_food\nfrom solution import Solution",
|
|
97
|
+
"playground_setup": "# Example test case\ngrid = [['X','X','X','X','X','X'],['X','*','O','O','O','X'],['X','O','O','#','O','X'],['X','X','X','X','X','X']]\nexpected = 3",
|
|
98
|
+
"playground_run": "result = run_get_food(Solution, grid)\nresult",
|
|
99
|
+
"playground_assert": "assert_get_food(result, expected)"
|
|
100
|
+
}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
"_tags": {
|
|
9
9
|
"list": ["neetcode-150"]
|
|
10
10
|
},
|
|
11
|
-
"readme_description": "You are given a `m
|
|
11
|
+
"readme_description": "You are given a `m \u00d7 n` 2D grid initialized with these three possible values:\n\n- `-1` - A wall or obstacle that can not be traversed.\n- `0` - A gate.\n- `INF` - Infinity an empty room. We use the value `2^31 - 1 = 2147483647` to represent `INF`.\n\nFill each empty room with the distance to its nearest gate. If it is impossible to reach a gate, it should be filled with `INF`.\n\n**Follow up:** Can you solve it in-place and in O(m \u00d7 n) time complexity?",
|
|
12
12
|
"_readme_examples": {
|
|
13
13
|
"list": [
|
|
14
14
|
{
|
|
15
|
-
"content": "```\nInput: rooms = [[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]]\nOutput: [[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]\n**Explanation:** the 2D grid is:\n```\nINF -1 0 INF\nINF INF INF -1\nINF -1 INF -1\n 0 -1 INF INF\n```\nthe result is:\n```\n 3 -1 0 1\n 2 2 1 -1\n 1 -1 2 -1\n 0 -1 3 4\n```\nexplanation: the gate is located at (0,2), (3,0), (3,3). the room at (0,0) is distance 3 from the nearest gate at (3,0)
|
|
15
|
+
"content": "```\nInput: rooms = [[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]]\nOutput: [[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]\n```\n\n**Explanation:** the 2D grid is:\n\n```\nINF -1 0 INF\nINF INF INF -1\nINF -1 INF -1\n 0 -1 INF INF\n```\nthe result is:\n```\n 3 -1 0 1\n 2 2 1 -1\n 1 -1 2 -1\n 0 -1 3 4\n```\nexplanation: the gate is located at (0,2), (3,0), (3,3). the room at (0,0) is distance 3 from the nearest gate at (3,0)."
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"content": "```\nInput: rooms = [[0,-1],[2147483647,2147483647]]\nOutput: [[0,-1],[1,2]]\n```"
|
leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/zigzag_conversion.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "zigzag_conversion",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "6",
|
|
5
|
+
"problem_title": "Zigzag Conversion",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "String",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "The string `\"PAYPALISHIRING\"` is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)\n\n```\nP A H N\nA P L S I I G\nY I R\n```\n\nAnd then read line by line: `\"PAHNAPLSIIGYIR\"`\n\nWrite the code that will take a string and make this conversion given a number of rows:\n\n```\nstring convert(string s, int numRows);\n```",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: s = \"PAYPALISHIRING\", numRows = 3\nOutput: \"PAHNAPLSIIGYIR\"\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: s = \"PAYPALISHIRING\", numRows = 4\nOutput: \"PINALSIGYAHRPI\"\nExplanation:\n\nP I N\nA L S I G\nY A H R\nP I\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "```\nInput: s = \"A\", numRows = 1\nOutput: \"A\"\n```"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"readme_constraints": "- `1 <= s.length <= 1000`\n- `s` consists of English letters (lower-case and upper-case), `','` and `'.'`.\n- `1 <= numRows <= 1000`",
|
|
26
|
+
"readme_additional": "",
|
|
27
|
+
"helpers_imports": "",
|
|
28
|
+
"helpers_content": "",
|
|
29
|
+
"helpers_run_name": "convert",
|
|
30
|
+
"helpers_run_signature": "(solution_class: type, s: str, num_rows: int)",
|
|
31
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.convert(s, num_rows)",
|
|
32
|
+
"helpers_assert_name": "convert",
|
|
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_convert, run_convert\nfrom .solution import Solution",
|
|
39
|
+
"test_content": "",
|
|
40
|
+
"test_class_name": "ZigzagConversion",
|
|
41
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
42
|
+
"_solution_methods": {
|
|
43
|
+
"list": [
|
|
44
|
+
{
|
|
45
|
+
"name": "convert",
|
|
46
|
+
"signature": "(self, s: str, num_rows: int) -> str",
|
|
47
|
+
"body": " # TODO: Implement convert\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_convert",
|
|
64
|
+
"signature": "(self, s: str, num_rows: int, expected: str)",
|
|
65
|
+
"parametrize": "s, num_rows, expected",
|
|
66
|
+
"test_cases": {
|
|
67
|
+
"list": [
|
|
68
|
+
"('PAYPALISHIRING', 3, 'PAHNAPLSIIGYIR')",
|
|
69
|
+
"('PAYPALISHIRING', 4, 'PINALSIGYAHRPI')",
|
|
70
|
+
"('PAYPALISHIRING', 5, 'PHASIYIRPLIGAN')",
|
|
71
|
+
"('A', 1, 'A')",
|
|
72
|
+
"('AB', 1, 'AB')",
|
|
73
|
+
"('ABCDEF', 1, 'ABCDEF')",
|
|
74
|
+
"('ABC', 2, 'ACB')",
|
|
75
|
+
"('ABCD', 2, 'ACBD')",
|
|
76
|
+
"('ABCDE', 2, 'ACEBD')",
|
|
77
|
+
"('ABAB', 2, 'AABB')",
|
|
78
|
+
"('ABCD', 3, 'ABDC')",
|
|
79
|
+
"('ABCDE', 3, 'AEBDC')",
|
|
80
|
+
"('ABCD', 4, 'ABCD')",
|
|
81
|
+
"('ABCDEF', 4, 'ABFCED')",
|
|
82
|
+
"('AB', 2, 'AB')",
|
|
83
|
+
"('ABC', 5, 'ABC')",
|
|
84
|
+
"('Z', 1000, 'Z')",
|
|
85
|
+
"('XY', 3, 'XY')",
|
|
86
|
+
"('abcdefghijklmnop', 5, 'aibhjpcgkodflnem')",
|
|
87
|
+
"('a,b.c', 2, 'abc,.')"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"body": " result = run_convert(Solution, s, num_rows)\n assert_convert(result, expected)"
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"playground_imports": "from helpers import run_convert, assert_convert\nfrom solution import Solution",
|
|
95
|
+
"playground_setup": "# Example test case\ns = 'PAYPALISHIRING'\nnum_rows = 3\nexpected = 'PAHNAPLSIIGYIR'",
|
|
96
|
+
"playground_run": "result = run_convert(Solution, s, num_rows)\nresult",
|
|
97
|
+
"playground_assert": "assert_convert(result, expected)"
|
|
98
|
+
}
|