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.
Files changed (349) hide show
  1. leetcode_py_sdk-1.0.5/PKG-INFO +137 -0
  2. leetcode_py_sdk-1.0.5/README.md +98 -0
  3. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/pyproject.toml +2 -2
  4. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/pyproject.toml.orig +2 -2
  5. leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/integer_to_roman.json +98 -0
  6. {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
  7. leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/shortest_path_to_get_food.json +100 -0
  8. {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
  9. leetcode_py_sdk-1.0.5/src/leetcode_py/cli/resources/leetcode/json/problems/zigzag_conversion.json +98 -0
  10. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +51 -5
  11. leetcode_py_sdk-1.0.3/PKG-INFO +0 -371
  12. leetcode_py_sdk-1.0.3/README.md +0 -332
  13. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/__init__.py +0 -0
  14. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/__init__.py +0 -0
  15. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/__init__.py +0 -0
  16. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/gen.py +0 -0
  17. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/list.py +0 -0
  18. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/commands/scrape.py +0 -0
  19. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/main.py +0 -0
  20. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
  21. {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
  22. {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
  23. {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
  24. {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
  25. {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
  26. {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
  27. {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
  28. {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
  29. {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
  30. {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
  31. {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
  32. {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
  33. {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
  34. {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
  35. {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
  36. {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
  37. {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
  38. {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
  39. {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
  40. {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
  41. {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
  42. {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
  43. {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
  44. {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
  45. {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
  46. {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
  47. {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
  48. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/candy.json +0 -0
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/combinations.json +0 -0
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/ipo.json +0 -0
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {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
  163. {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
  164. {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
  165. {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
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {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
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {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
  188. {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
  189. {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
  190. {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
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {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
  197. {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
  198. {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
  199. {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
  200. {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
  201. {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
  202. {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
  203. {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
  204. {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
  205. {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
  206. {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
  207. {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
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {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
  217. {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
  218. {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
  219. {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
  220. {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
  221. {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
  222. {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
  223. {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
  224. {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
  225. {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
  226. {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
  227. {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
  228. {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
  229. {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
  230. {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
  231. {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
  232. {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
  233. {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
  234. {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
  235. {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
  236. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
  237. {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
  238. {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
  239. {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
  240. {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
  241. {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
  242. {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
  243. {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
  244. {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
  245. {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
  246. {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
  247. {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
  248. {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
  249. {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
  250. {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
  251. {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
  252. {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
  253. {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
  254. {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
  255. {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
  256. {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
  257. {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
  258. {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
  259. {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
  260. {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
  261. {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
  262. {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
  263. {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
  264. {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
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {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
  272. {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
  273. {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
  274. {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
  275. {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
  276. {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
  277. {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
  278. {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
  279. {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
  280. {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
  281. {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
  282. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/sqrtx.json +0 -0
  283. {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
  284. {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
  285. {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
  286. {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
  287. {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
  288. {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
  289. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
  290. {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
  291. {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
  292. {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
  293. {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
  294. {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
  295. {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
  296. {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
  297. {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
  298. {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
  299. {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
  300. {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
  301. {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
  302. {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
  303. {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
  304. {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
  305. {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
  306. {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
  307. {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
  308. {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
  309. {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
  310. {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
  311. {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
  312. {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
  313. {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
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {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
  332. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/__init__.py +0 -0
  333. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
  334. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/resources.py +0 -0
  335. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
  336. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/__init__.py +0 -0
  337. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/_utils.py +0 -0
  338. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/dict_tree.py +0 -0
  339. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
  340. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/graph_node.py +0 -0
  341. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/list_node.py +0 -0
  342. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/data_structures/tree_node.py +0 -0
  343. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/py.typed +0 -0
  344. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/__init__.py +0 -0
  345. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/check_test_cases.py +0 -0
  346. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/generator.py +0 -0
  347. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/logged_test.py +0 -0
  348. {leetcode_py_sdk-1.0.3 → leetcode_py_sdk-1.0.5}/src/leetcode_py/tools/parser.py +0 -0
  349. {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
+ [![tests](https://img.shields.io/github/actions/workflow/status/wislertt/leetcode-py/cd.yml?branch=main&label=tests&logo=github)](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
41
+ [![release](https://img.shields.io/github/actions/workflow/status/wislertt/leetcode-py/cd.yml?branch=main&label=release&logo=github)](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
42
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
43
+ [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
44
+ [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
45
+ [![codecov](https://codecov.io/gh/wislertt/leetcode-py/graph/badge.svg?token=TI97VUIA4Z)](https://codecov.io/gh/wislertt/leetcode-py)
46
+ [![pypi](https://img.shields.io/pypi/v/leetcode-py-sdk.svg?color=blue)](https://pypi.python.org/pypi/leetcode-py-sdk)
47
+ [![downloads](https://static.pepy.tech/personalized-badge/leetcode-py-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=pypi%20downloads)](https://pepy.tech/projects/leetcode-py-sdk)
48
+ [![python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue?logo=python)](https://github.com/wislertt/leetcode-py/)
49
+ [![Star ⭐](https://img.shields.io/github/stars/wislertt/leetcode-py?style=flat&logo=github&color=ffcc00)](https://github.com/wislertt/leetcode-py)
50
+ [![Sponsor 💖](https://img.shields.io/badge/Sponsor-💖-pink?style=flat)](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
+ [![Star ⭐](https://img.shields.io/github/stars/wislertt/leetcode-py?style=flat&logo=github&color=ffcc00)](https://github.com/wislertt/leetcode-py)
133
+ [![Sponsor 💖](https://img.shields.io/badge/Sponsor-💖-pink?style=flat)](https://github.com/sponsors/wislertt)
134
+
135
+ ## License
136
+
137
+ Apache-2.0. See [LICENSE](LICENSE).
@@ -0,0 +1,98 @@
1
+ [![tests](https://img.shields.io/github/actions/workflow/status/wislertt/leetcode-py/cd.yml?branch=main&label=tests&logo=github)](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
2
+ [![release](https://img.shields.io/github/actions/workflow/status/wislertt/leetcode-py/cd.yml?branch=main&label=release&logo=github)](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
3
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
4
+ [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
5
+ [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=wislertt_leetcode-py&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
6
+ [![codecov](https://codecov.io/gh/wislertt/leetcode-py/graph/badge.svg?token=TI97VUIA4Z)](https://codecov.io/gh/wislertt/leetcode-py)
7
+ [![pypi](https://img.shields.io/pypi/v/leetcode-py-sdk.svg?color=blue)](https://pypi.python.org/pypi/leetcode-py-sdk)
8
+ [![downloads](https://static.pepy.tech/personalized-badge/leetcode-py-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=pypi%20downloads)](https://pepy.tech/projects/leetcode-py-sdk)
9
+ [![python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue?logo=python)](https://github.com/wislertt/leetcode-py/)
10
+ [![Star ⭐](https://img.shields.io/github/stars/wislertt/leetcode-py?style=flat&logo=github&color=ffcc00)](https://github.com/wislertt/leetcode-py)
11
+ [![Sponsor 💖](https://img.shields.io/badge/Sponsor-💖-pink?style=flat)](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
+ [![Star ⭐](https://img.shields.io/github/stars/wislertt/leetcode-py?style=flat&logo=github&color=ffcc00)](https://github.com/wislertt/leetcode-py)
94
+ [![Sponsor 💖](https://img.shields.io/badge/Sponsor-💖-pink?style=flat)](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"
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.11.0,<0.12.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" # use git tag instead
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.11.0,<0.12.0"]
65
+ requires = ["uv_build>=0.12.0,<0.13.0"]
66
66
  build-backend = "uv_build"
67
67
 
68
68
  [tool.coverage.run]
@@ -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": { "list": ["grind"] },
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
- { "content": "```\nInput: grid = [[0,1],[1,0]]\nOutput: 2\n```" },
13
- { "content": "```\nInput: grid = [[0,0,0],[1,1,0],[1,1,0]]\nOutput: 4\n```" },
14
- { "content": "```\nInput: grid = [[1,0,0],[1,1,0],[1,1,0]]\nOutput: -1\n```" }
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": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
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 × 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 × n) time complexity?",
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```"
@@ -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
+ }