leetcode-py-sdk 0.43.7__tar.gz → 0.45.0__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 (206) hide show
  1. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/PKG-INFO +1 -1
  2. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/pyproject.toml +1 -1
  3. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json +79 -0
  4. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/copy_list_with_random_pointer.json +91 -0
  5. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/distinct_subsequences.json +90 -0
  6. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json +89 -0
  7. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/generate_parentheses.json +76 -0
  8. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json +96 -0
  9. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json +79 -0
  10. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens.json +90 -0
  11. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/plus_one.json +92 -0
  12. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/powx_n.json +82 -0
  13. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/regular_expression_matching.json +87 -0
  14. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/search_a_2d_matrix.json +91 -0
  15. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/single_number.json +91 -0
  16. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/subsets_ii.json +88 -0
  17. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/surrounded_regions.json +89 -0
  18. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum.json +1 -1
  19. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +15 -0
  20. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/generator.py +3 -1
  21. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/README.md +0 -0
  22. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/__init__.py +0 -0
  23. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/__init__.py +0 -0
  24. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/__init__.py +0 -0
  25. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/gen.py +0 -0
  26. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/list.py +0 -0
  27. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/scrape.py +0 -0
  28. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/main.py +0 -0
  29. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
  30. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/accounts_merge.json +0 -0
  31. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_binary.json +0 -0
  32. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_two_numbers.json +0 -0
  33. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/alien_dictionary.json +0 -0
  34. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/balanced_binary_tree.json +0 -0
  35. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator.json +0 -0
  36. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock.json +0 -0
  37. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_search.json +0 -0
  38. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_inorder_traversal.json +0 -0
  39. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_level_order_traversal.json +0 -0
  40. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_maximum_path_sum.json +0 -0
  41. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_postorder_traversal.json +0 -0
  42. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_preorder_traversal.json +0 -0
  43. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_right_side_view.json +0 -0
  44. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/cheapest_flights_within_k_stops.json +0 -0
  45. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/climbing_stairs.json +0 -0
  46. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/clone_graph.json +0 -0
  47. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change.json +0 -0
  48. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum.json +0 -0
  49. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_binary_tree_from_preorder_and_inorder_traversal.json +0 -0
  50. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/container_with_most_water.json +0 -0
  51. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate.json +0 -0
  52. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contiguous_array.json +0 -0
  53. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/counting_bits.json +0 -0
  54. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule.json +0 -0
  55. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_ii.json +0 -0
  56. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/daily_temperatures.json +0 -0
  57. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_string.json +0 -0
  58. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_ways.json +0 -0
  59. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_add_and_search_words_data_structure.json +0 -0
  60. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_in_memory_file_system.json +0 -0
  61. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diagonal_traverse.json +0 -0
  62. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diameter_of_binary_tree.json +0 -0
  63. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/encode_and_decode_strings.json +0 -0
  64. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_reverse_polish_notation.json +0 -0
  65. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_all_anagrams_in_a_string.json +0 -0
  66. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_first_and_last_position_of_element_in_sorted_array.json +0 -0
  67. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_k_closest_elements.json +0 -0
  68. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_median_from_data_stream.json +0 -0
  69. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_minimum_in_rotated_sorted_array.json +0 -0
  70. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_duplicate_number.json +0 -0
  71. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_bad_version.json +0 -0
  72. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_missing_positive.json +0 -0
  73. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/flood_fill.json +0 -0
  74. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/gas_station.json +0 -0
  75. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/graph_valid_tree.json +0 -0
  76. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/group_anagrams.json +0 -0
  77. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber.json +0 -0
  78. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_ii.json +0 -0
  79. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_queue_using_stacks.json +0 -0
  80. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_trie_prefix_tree.json +0 -0
  81. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_interval.json +0 -0
  82. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/invert_binary_tree.json +0 -0
  83. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_graph_bipartite.json +0 -0
  84. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_subsequence.json +0 -0
  85. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game.json +0 -0
  86. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_ii.json +0 -0
  87. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/k_closest_points_to_origin.json +0 -0
  88. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_smallest_element_in_a_bst.json +0 -0
  89. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_rectangle_in_histogram.json +0 -0
  90. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/letter_combinations_of_a_phone_number.json +0 -0
  91. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle.json +0 -0
  92. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle_ii.json +0 -0
  93. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_subsequence.json +0 -0
  94. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_consecutive_sequence.json +0 -0
  95. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_path_in_a_matrix.json +0 -0
  96. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_subsequence.json +0 -0
  97. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindrome.json +0 -0
  98. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindromic_substring.json +0 -0
  99. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_repeating_character_replacement.json +0 -0
  100. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_substring_without_repeating_characters.json +0 -0
  101. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_search_tree.json +0 -0
  102. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_tree.json +0 -0
  103. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lru_cache.json +0 -0
  104. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element.json +0 -0
  105. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/max_points_on_a_line.json +0 -0
  106. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_depth_of_binary_tree.json +0 -0
  107. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_product_subarray.json +0 -0
  108. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_profit_in_job_scheduling.json +0 -0
  109. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_subarray.json +0 -0
  110. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_width_of_binary_tree.json +0 -0
  111. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/median_of_two_sorted_arrays.json +0 -0
  112. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms.json +0 -0
  113. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_ii.json +0 -0
  114. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_intervals.json +0 -0
  115. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_k_sorted_lists.json +0 -0
  116. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_two_sorted_lists.json +0 -0
  117. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/middle_of_the_linked_list.json +0 -0
  118. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_to_connect_all_points.json +0 -0
  119. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_stack.json +0 -0
  120. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_height_trees.json +0 -0
  121. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_path_sum.json +0 -0
  122. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_window_substring.json +0 -0
  123. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/missing_number.json +0 -0
  124. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/my_calendar_i.json +0 -0
  125. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/next_permutation.json +0 -0
  126. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/non_overlapping_intervals.json +0 -0
  127. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_1_bits.json +0 -0
  128. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_connected_components_in_an_undirected_graph.json +0 -0
  129. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_islands.json +0 -0
  130. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_provinces.json +0 -0
  131. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/odd_even_linked_list.json +0 -0
  132. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/pacific_atlantic_water_flow.json +0 -0
  133. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_partitioning.json +0 -0
  134. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindromic_substrings.json +0 -0
  135. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_equal_subset_sum.json +0 -0
  136. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_ii.json +0 -0
  137. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_iii.json +0 -0
  138. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutation_in_string.json +0 -0
  139. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
  140. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/product_of_array_except_self.json +0 -0
  141. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/ransom_note.json +0 -0
  142. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_nth_node_from_end_of_list.json +0 -0
  143. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reorder_list.json +0 -0
  144. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_bits.json +0 -0
  145. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_integer.json +0 -0
  146. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list.json +0 -0
  147. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list_ii.json +0 -0
  148. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_nodes_in_k_group.json +0 -0
  149. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_words_in_a_string.json +0 -0
  150. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_array.json +0 -0
  151. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_image.json +0 -0
  152. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotting_oranges.json +0 -0
  153. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/same_tree.json +0 -0
  154. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array.json +0 -0
  155. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/serialize_and_deserialize_binary_tree.json +0 -0
  156. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/set_matrix_zeroes.json +0 -0
  157. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number_iii.json +0 -0
  158. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sliding_window_maximum.json +0 -0
  159. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_colors.json +0 -0
  160. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/spiral_matrix.json +0 -0
  161. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/string_to_integer_atoi.json +0 -0
  162. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subarray_sum_equals_k.json +0 -0
  163. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
  164. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subtree_of_another_tree.json +0 -0
  165. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_two_integers.json +0 -0
  166. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/swap_nodes_in_pairs.json +0 -0
  167. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/task_scheduler.json +0 -0
  168. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum.json +0 -0
  169. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/time_based_key_value_store.json +0 -0
  170. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_elements.json +0 -0
  171. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_words.json +0 -0
  172. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/trapping_rain_water.json +0 -0
  173. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths.json +0 -0
  174. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_anagram.json +0 -0
  175. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome.json +0 -0
  176. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parentheses.json +0 -0
  177. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_sudoku.json +0 -0
  178. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/validate_binary_search_tree.json +0 -0
  179. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break.json +0 -0
  180. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_ladder.json +0 -0
  181. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search.json +0 -0
  182. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search_ii.json +0 -0
  183. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/zero_one_matrix.json +0 -0
  184. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/README.md +0 -0
  185. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/__init__.py +0 -0
  186. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/helpers.py +0 -0
  187. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/playground.ipynb +0 -0
  188. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/solution.py +0 -0
  189. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/test_solution.py +0 -0
  190. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/__init__.py +0 -0
  191. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
  192. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/resources.py +0 -0
  193. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
  194. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/__init__.py +0 -0
  195. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/_utils.py +0 -0
  196. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/dict_tree.py +0 -0
  197. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
  198. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/graph_node.py +0 -0
  199. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/list_node.py +0 -0
  200. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/tree_node.py +0 -0
  201. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/py.typed +0 -0
  202. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/__init__.py +0 -0
  203. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/check_test_cases.py +0 -0
  204. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/logged_test.py +0 -0
  205. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/parser.py +0 -0
  206. {leetcode_py_sdk-0.43.7 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/scraper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: leetcode-py-sdk
3
- Version: 0.43.7
3
+ Version: 0.45.0
4
4
  Summary: Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing
5
5
  Keywords: algorithms,coding-practice,data-structures,interview-prep,leetcode
6
6
  Author: Wisaroot Lertthaweedech
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "leetcode-py-sdk"
3
- version = "0.43.7" # use git tag instead
3
+ version = "0.45.0" # 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"}
@@ -0,0 +1,79 @@
1
+ {
2
+ "problem_name": "combination_sum_ii",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "40",
5
+ "problem_title": "Combination Sum II",
6
+ "difficulty": "Medium",
7
+ "topics": "Array, Backtracking",
8
+ "_tags": { "list": ["neetcode-150"] },
9
+ "readme_description": "Given a collection of candidate numbers (`candidates`) and a target number (`target`), find all unique combinations in `candidates` where the candidate numbers sum to `target`.\n\nEach number in `candidates` may only be used **once** in the combination.\n\n**Note:** The solution set must not contain duplicate combinations.",
10
+ "_readme_examples": {
11
+ "list": [
12
+ {
13
+ "content": "```\nInput: candidates = [10,1,2,7,6,1,5], target = 8\nOutput: [[1,1,6],[1,2,5],[1,7],[2,6]]\n```"
14
+ },
15
+ { "content": "```\nInput: candidates = [2,5,2,1,2], target = 5\nOutput: [[1,2,2],[5]]\n```" }
16
+ ]
17
+ },
18
+ "readme_constraints": "- 1 <= candidates.length <= 100\n- 1 <= candidates[i] <= 50\n- 1 <= target <= 30",
19
+ "readme_additional": "",
20
+ "helpers_imports": "",
21
+ "helpers_content": "",
22
+ "helpers_run_name": "combination_sum2",
23
+ "helpers_run_signature": "(solution_class: type, candidates: list[int], target: int)",
24
+ "helpers_run_body": " implementation = solution_class()\n result = implementation.combination_sum2(candidates, target)\n return sorted([sorted(combo) for combo in result])",
25
+ "helpers_assert_name": "combination_sum2",
26
+ "helpers_assert_signature": "(result: list[list[int]], expected: list[list[int]]) -> bool",
27
+ "helpers_assert_body": " expected_sorted = sorted([sorted(combo) for combo in expected])\n assert result == expected_sorted\n return True",
28
+ "solution_imports": "",
29
+ "solution_contents": "",
30
+ "solution_class_content": "",
31
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_combination_sum2, run_combination_sum2\nfrom .solution import Solution",
32
+ "test_content": "",
33
+ "test_class_name": "CombinationSumII",
34
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
35
+ "_solution_methods": {
36
+ "list": [
37
+ {
38
+ "name": "combination_sum2",
39
+ "signature": "(self, candidates: list[int], target: int) -> list[list[int]]",
40
+ "body": " # TODO: Implement combination_sum2\n return []"
41
+ }
42
+ ]
43
+ },
44
+ "_test_helper_methods": {
45
+ "list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
46
+ },
47
+ "_test_methods": {
48
+ "list": [
49
+ {
50
+ "name": "test_combination_sum2",
51
+ "signature": "(self, candidates: list[int], target: int, expected: list[list[int]])",
52
+ "parametrize": "candidates, target, expected",
53
+ "test_cases": {
54
+ "list": [
55
+ "([10, 1, 2, 7, 6, 1, 5], 8, [[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]])",
56
+ "([2, 5, 2, 1, 2], 5, [[1, 2, 2], [5]])",
57
+ "([1], 1, [[1]])",
58
+ "([1], 2, [])",
59
+ "([2], 1, [])",
60
+ "([1, 1], 2, [[1, 1]])",
61
+ "([1, 1, 1], 2, [[1, 1]])",
62
+ "([1, 1, 1, 1, 1], 3, [[1, 1, 1]])",
63
+ "([1, 2], 4, [])",
64
+ "([1, 2, 3], 3, [[1, 2], [3]])",
65
+ "([5, 3, 2, 1], 6, [[1, 2, 3], [1, 5]])",
66
+ "([1, 2, 2, 2, 5], 5, [[1, 2, 2], [5]])",
67
+ "([2, 2, 2], 4, [[2, 2]])",
68
+ "([1, 1, 2, 2], 4, [[1, 1, 2], [2, 2]])"
69
+ ]
70
+ },
71
+ "body": " result = run_combination_sum2(Solution, candidates, target)\n assert_combination_sum2(result, expected)"
72
+ }
73
+ ]
74
+ },
75
+ "playground_imports": "from helpers import run_combination_sum2, assert_combination_sum2\nfrom solution import Solution",
76
+ "playground_setup": "# Example test case\ncandidates = [10, 1, 2, 7, 6, 1, 5]\ntarget = 8\nexpected = [[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]]",
77
+ "playground_run": "result = run_combination_sum2(Solution, candidates, target)\nresult",
78
+ "playground_assert": "assert_combination_sum2(result, expected)"
79
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "problem_name": "copy_list_with_random_pointer",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "138",
5
+ "problem_title": "Copy List with Random Pointer",
6
+ "difficulty": "Medium",
7
+ "topics": "Hash Table, Linked List",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "A linked list of length `n` is given such that each node contains an additional **random pointer**, which could point to any node in the list, or `null`.\n\nConstruct a [**deep copy**](https://en.wikipedia.org/wiki/Object_copying#Deep_copy) of the list. The deep copy should consist of exactly `n` **brand new** nodes, where each new node has its value set to the value of its corresponding original node. Both the `next` and `random` pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. **None of the pointers in the new list should point to nodes in the original list**.\n\nReturn *the head of the copied linked list*.\n\nThe linked list is represented in the input/output as a list of `n` nodes. Each node is represented as a pair of `[val, random_index]` where:\n\n- `val`: an integer representing `Node.val`\n- `random_index`: the index of the node (range from `0` to `n-1`) that the `random` pointer points to, or `null` if it does not point to any node.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "![Example 1](https://assets.leetcode.com/uploads/2019/12/18/e1.png)\n\n```\nInput: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]\nOutput: [[7,null],[13,0],[11,4],[10,2],[1,0]]\n```"
16
+ },
17
+ {
18
+ "content": "![Example 2](https://assets.leetcode.com/uploads/2019/12/18/e2.png)\n\n```\nInput: head = [[1,1],[2,1]]\nOutput: [[1,1],[2,1]]\n```"
19
+ },
20
+ {
21
+ "content": "![Example 3](https://assets.leetcode.com/uploads/2019/12/18/e3.png)\n\n```\nInput: head = [[3,null],[3,0],[3,null]]\nOutput: [[3,null],[3,0],[3,null]]\n```"
22
+ }
23
+ ]
24
+ },
25
+ "readme_constraints": "- 0 <= n <= 1000\n- -10^4 <= Node.val <= 10^4\n- Node.random is null or points to some node in the linked list.",
26
+ "readme_additional": "",
27
+ "helpers_imports": "from .solution import Node",
28
+ "helpers_content": "def _build_random_list(nodes: list[list[int | None]]) -> Node | None:\n if not nodes:\n return None\n created: list[Node] = []\n for node_spec in nodes:\n val = node_spec[0]\n assert isinstance(val, int)\n created.append(Node(val))\n for i, node_spec in enumerate(nodes):\n if i + 1 < len(created):\n created[i].next = created[i + 1]\n rand_idx = node_spec[1]\n if rand_idx is not None:\n created[i].random = created[rand_idx]\n return created[0]\n\n\ndef _serialize_random_list(head: Node | None) -> list[list[int | None]]:\n index_by_id: dict[int, int] = {}\n cur: Node | None = head\n i = 0\n while cur is not None:\n index_by_id[id(cur)] = i\n i += 1\n cur = cur.next\n result: list[list[int | None]] = []\n cur = head\n while cur is not None:\n rand_idx = index_by_id[id(cur.random)] if cur.random is not None else None\n result.append([cur.val, rand_idx])\n cur = cur.next\n return result",
29
+ "helpers_run_name": "copy_random_list",
30
+ "helpers_run_signature": "(solution_class: type, nodes: list[list[int | None]])",
31
+ "helpers_run_body": " implementation = solution_class()\n head = _build_random_list(nodes)\n copied = implementation.copy_random_list(head)\n return _serialize_random_list(copied)",
32
+ "helpers_assert_name": "copy_random_list",
33
+ "helpers_assert_signature": "(result: list[list[int | None]], expected: list[list[int | None]]) -> bool",
34
+ "helpers_assert_body": " assert result == expected\n return True",
35
+ "solution_imports": "from __future__ import annotations",
36
+ "solution_contents": "class Node:\n def __init__(self, x: int, next: Node | None = None, random: Node | None = None):\n self.val = int(x)\n self.next = next\n self.random = random\n\n\n",
37
+ "solution_class_content": "",
38
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_copy_random_list, run_copy_random_list\nfrom .solution import Solution",
39
+ "test_content": "",
40
+ "test_class_name": "CopyListWithRandomPointer",
41
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
42
+ "_solution_methods": {
43
+ "list": [
44
+ {
45
+ "name": "copy_random_list",
46
+ "signature": "(self, head: Node | None) -> Node | None",
47
+ "body": " # TODO: Implement copy_random_list\n return None"
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_copy_random_list",
64
+ "signature": "(self, nodes: list[list[int | None]], expected: list[list[int | None]])",
65
+ "parametrize": "nodes, expected",
66
+ "test_cases": {
67
+ "list": [
68
+ "([[7, None], [13, 0], [11, 4], [10, 2], [1, 0]], [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]])",
69
+ "([[1, 1], [2, 1]], [[1, 1], [2, 1]])",
70
+ "([[3, None], [3, 0], [3, None]], [[3, None], [3, 0], [3, None]])",
71
+ "([], [])",
72
+ "([[1, None]], [[1, None]])",
73
+ "([[1, 0]], [[1, 0]])",
74
+ "([[1, None], [2, None]], [[1, None], [2, None]])",
75
+ "([[5, 1], [6, None], [7, 0]], [[5, 1], [6, None], [7, 0]])",
76
+ "([[0, None], [1, 0], [2, 1], [3, 2]], [[0, None], [1, 0], [2, 1], [3, 2]])",
77
+ "([[1, None], [2, 2], [3, 2]], [[1, None], [2, 2], [3, 2]])",
78
+ "([[42, None]], [[42, None]])",
79
+ "([[1, 2], [2, None], [3, 0]], [[1, 2], [2, None], [3, 0]])",
80
+ "([[1, None], [2, 0], [3, 1], [4, 2]], [[1, None], [2, 0], [3, 1], [4, 2]])"
81
+ ]
82
+ },
83
+ "body": " result = run_copy_random_list(Solution, nodes)\n assert_copy_random_list(result, expected)"
84
+ }
85
+ ]
86
+ },
87
+ "playground_imports": "from helpers import run_copy_random_list, assert_copy_random_list\nfrom solution import Node, Solution",
88
+ "playground_setup": "# Example test case (each node is [val, random_index])\nnodes = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]\nexpected = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]",
89
+ "playground_run": "result = run_copy_random_list(Solution, nodes)\nresult",
90
+ "playground_assert": "assert_copy_random_list(result, expected)"
91
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "problem_name": "distinct_subsequences",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "115",
5
+ "problem_title": "Distinct Subsequences",
6
+ "difficulty": "Hard",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given two strings `s` and `t`, return *the number of distinct subsequences of* `s` *which equals* `t`.\n\nThe test cases are generated so that the answer fits on a **32-bit** signed integer.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "```\nInput: s = \"rabbbit\", t = \"rabbit\"\nOutput: 3\nExplanation:\nAs shown below, there are 3 ways you can generate \"rabbit\" from s.\nrabbbit\nrabbbit\nrabbbit\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: s = \"babgbag\", t = \"bag\"\nOutput: 5\nExplanation:\nAs shown below, there are 5 ways you can generate \"bag\" from s.\nbabgbag\nbabgbag\nbabgbag\nbabgbag\nbabgbag\n```"
19
+ }
20
+ ]
21
+ },
22
+ "readme_constraints": "- 1 <= s.length, t.length <= 1000\n- s and t consist of English letters.",
23
+ "readme_additional": "",
24
+ "helpers_imports": "",
25
+ "helpers_content": "",
26
+ "helpers_run_name": "num_distinct",
27
+ "helpers_run_signature": "(solution_class: type, s: str, t: str)",
28
+ "helpers_run_body": " implementation = solution_class()\n return implementation.num_distinct(s, t)",
29
+ "helpers_assert_name": "num_distinct",
30
+ "helpers_assert_signature": "(result: int, expected: int) -> bool",
31
+ "helpers_assert_body": " assert result == expected\n return True",
32
+ "solution_imports": "",
33
+ "solution_contents": "",
34
+ "solution_class_content": "",
35
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_num_distinct, run_num_distinct\nfrom .solution import Solution",
36
+ "test_content": "",
37
+ "test_class_name": "DistinctSubsequences",
38
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
39
+ "_solution_methods": {
40
+ "list": [
41
+ {
42
+ "name": "num_distinct",
43
+ "signature": "(self, s: str, t: str) -> int",
44
+ "body": " # TODO: Implement num_distinct\n return 0"
45
+ }
46
+ ]
47
+ },
48
+ "_test_helper_methods": {
49
+ "list": [
50
+ {
51
+ "name": "setup_method",
52
+ "parameters": "",
53
+ "body": "self.solution = Solution()"
54
+ }
55
+ ]
56
+ },
57
+ "_test_methods": {
58
+ "list": [
59
+ {
60
+ "name": "test_num_distinct",
61
+ "signature": "(self, s: str, t: str, expected: int)",
62
+ "parametrize": "s, t, expected",
63
+ "test_cases": {
64
+ "list": [
65
+ "('rabbbit', 'rabbit', 3)",
66
+ "('babgbag', 'bag', 5)",
67
+ "('a', 'a', 1)",
68
+ "('a', 'b', 0)",
69
+ "('aaa', 'a', 3)",
70
+ "('aaa', 'aa', 3)",
71
+ "('aaaa', 'aa', 6)",
72
+ "('abc', 'abc', 1)",
73
+ "('abc', 'abcd', 0)",
74
+ "('abab', 'ab', 3)",
75
+ "('abab', 'bab', 1)",
76
+ "('abcabc', 'abc', 4)",
77
+ "('dddd', 'dd', 6)",
78
+ "('aab', 'ab', 2)",
79
+ "('bbb', 'bb', 3)"
80
+ ]
81
+ },
82
+ "body": " result = run_num_distinct(Solution, s, t)\n assert_num_distinct(result, expected)"
83
+ }
84
+ ]
85
+ },
86
+ "playground_imports": "from helpers import run_num_distinct, assert_num_distinct\nfrom solution import Solution",
87
+ "playground_setup": "# Example test case\ns = 'rabbbit'\nt = 'rabbit'\nexpected = 3",
88
+ "playground_run": "result = run_num_distinct(Solution, s, t)\nresult",
89
+ "playground_assert": "assert_num_distinct(result, expected)"
90
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "problem_name": "edit_distance",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "72",
5
+ "problem_title": "Edit Distance",
6
+ "difficulty": "Hard",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given two strings `word1` and `word2`, return *the minimum number of operations required to convert* `word1` *to* `word2`.\n\nYou have the following three operations permitted on a word:\n\n- Insert a character\n- Delete a character\n- Replace a character",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "```\nInput: word1 = \"horse\", word2 = \"ros\"\nOutput: 3\nExplanation:\nhorse -> rorse (replace 'h' with 'r')\nrorse -> rose (remove 'r')\nrose -> ros (remove 'e')\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: word1 = \"intention\", word2 = \"execution\"\nOutput: 5\nExplanation:\nintention -> inention (remove 't')\ninention -> enention (replace 'i' with 'e')\nenention -> exention (replace 'n' with 'x')\nexention -> exection (replace 'n' with 'c')\nexection -> execution (insert 'u')\n```"
19
+ }
20
+ ]
21
+ },
22
+ "readme_constraints": "- 0 <= word1.length, word2.length <= 500\n- word1 and word2 consist of lowercase English letters.",
23
+ "readme_additional": "",
24
+ "helpers_imports": "",
25
+ "helpers_content": "",
26
+ "helpers_run_name": "min_distance",
27
+ "helpers_run_signature": "(solution_class: type, word1: str, word2: str)",
28
+ "helpers_run_body": " implementation = solution_class()\n return implementation.min_distance(word1, word2)",
29
+ "helpers_assert_name": "min_distance",
30
+ "helpers_assert_signature": "(result: int, expected: int) -> bool",
31
+ "helpers_assert_body": " assert result == expected\n return True",
32
+ "solution_imports": "",
33
+ "solution_contents": "",
34
+ "solution_class_content": "",
35
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_min_distance, run_min_distance\nfrom .solution import Solution",
36
+ "test_content": "",
37
+ "test_class_name": "EditDistance",
38
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
39
+ "_solution_methods": {
40
+ "list": [
41
+ {
42
+ "name": "min_distance",
43
+ "signature": "(self, word1: str, word2: str) -> int",
44
+ "body": " # TODO: Implement min_distance\n return 0"
45
+ }
46
+ ]
47
+ },
48
+ "_test_helper_methods": {
49
+ "list": [
50
+ {
51
+ "name": "setup_method",
52
+ "parameters": "",
53
+ "body": "self.solution = Solution()"
54
+ }
55
+ ]
56
+ },
57
+ "_test_methods": {
58
+ "list": [
59
+ {
60
+ "name": "test_min_distance",
61
+ "signature": "(self, word1: str, word2: str, expected: int)",
62
+ "parametrize": "word1, word2, expected",
63
+ "test_cases": {
64
+ "list": [
65
+ "('horse', 'ros', 3)",
66
+ "('intention', 'execution', 5)",
67
+ "('', '', 0)",
68
+ "('', 'a', 1)",
69
+ "('a', '', 1)",
70
+ "('a', 'a', 0)",
71
+ "('ab', 'a', 1)",
72
+ "('a', 'ab', 1)",
73
+ "('ab', 'ba', 2)",
74
+ "('abc', 'abc', 0)",
75
+ "('abc', 'abd', 1)",
76
+ "('kitten', 'sitting', 3)",
77
+ "('saturday', 'sunday', 3)",
78
+ "('', 'abc', 3)"
79
+ ]
80
+ },
81
+ "body": " result = run_min_distance(Solution, word1, word2)\n assert_min_distance(result, expected)"
82
+ }
83
+ ]
84
+ },
85
+ "playground_imports": "from helpers import run_min_distance, assert_min_distance\nfrom solution import Solution",
86
+ "playground_setup": "# Example test case\nword1 = 'horse'\nword2 = 'ros'\nexpected = 3",
87
+ "playground_run": "result = run_min_distance(Solution, word1, word2)\nresult",
88
+ "playground_assert": "assert_min_distance(result, expected)"
89
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "problem_name": "generate_parentheses",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "22",
5
+ "problem_title": "Generate Parentheses",
6
+ "difficulty": "Medium",
7
+ "topics": "String, Dynamic Programming, Backtracking",
8
+ "_tags": { "list": ["neetcode-150"] },
9
+ "readme_description": "Given `n` pairs of parentheses, write a function to generate all combinations of well-formed parentheses.",
10
+ "_readme_examples": {
11
+ "list": [
12
+ {
13
+ "content": "```\nInput: n = 3\nOutput: [\"((()))\",\"(()())\",\"(())()\",\"()(())\",\"()()()\"]\n```"
14
+ },
15
+ { "content": "```\nInput: n = 1\nOutput: [\"()\"]\n```" }
16
+ ]
17
+ },
18
+ "readme_constraints": "- 1 <= n <= 8",
19
+ "readme_additional": "",
20
+ "helpers_imports": "",
21
+ "helpers_content": "",
22
+ "helpers_run_name": "generate_parenthesis",
23
+ "helpers_run_signature": "(solution_class: type, n: int)",
24
+ "helpers_run_body": " implementation = solution_class()\n return sorted(implementation.generate_parenthesis(n))",
25
+ "helpers_assert_name": "generate_parenthesis",
26
+ "helpers_assert_signature": "(result: list[str], expected: list[str]) -> bool",
27
+ "helpers_assert_body": " assert sorted(result) == sorted(expected)\n return True",
28
+ "solution_imports": "",
29
+ "solution_contents": "",
30
+ "solution_class_content": "",
31
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_generate_parenthesis, run_generate_parenthesis\nfrom .solution import Solution",
32
+ "test_content": "",
33
+ "test_class_name": "GenerateParentheses",
34
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
35
+ "_solution_methods": {
36
+ "list": [
37
+ {
38
+ "name": "generate_parenthesis",
39
+ "signature": "(self, n: int) -> list[str]",
40
+ "body": " # TODO: Implement generate_parenthesis\n return []"
41
+ }
42
+ ]
43
+ },
44
+ "_test_helper_methods": {
45
+ "list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
46
+ },
47
+ "_test_methods": {
48
+ "list": [
49
+ {
50
+ "name": "test_generate_parenthesis",
51
+ "signature": "(self, n: int, expected: list[str])",
52
+ "parametrize": "n, expected",
53
+ "test_cases": {
54
+ "list": [
55
+ "(1, ['()'])",
56
+ "(2, ['(())', '()()'])",
57
+ "(3, ['((()))', '(()())', '(())()', '()(())', '()()()'])",
58
+ "(4, ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'])",
59
+ "(0, [''])",
60
+ "(5, ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'])",
61
+ "pytest.param(1, ['()'], id='dup1')",
62
+ "pytest.param(2, ['(())', '()()'], id='dup2')",
63
+ "pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3a')",
64
+ "pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3b')",
65
+ "pytest.param(3, ['((()))', '(()())', '(())()', '()(())', '()()()'], id='dup3c')"
66
+ ]
67
+ },
68
+ "body": " result = run_generate_parenthesis(Solution, n)\n assert_generate_parenthesis(result, expected)"
69
+ }
70
+ ]
71
+ },
72
+ "playground_imports": "from helpers import run_generate_parenthesis, assert_generate_parenthesis\nfrom solution import Solution",
73
+ "playground_setup": "# Example test case\nn = 3\nexpected = ['((()))', '(()())', '(())()', '()(())', '()()()']",
74
+ "playground_run": "result = run_generate_parenthesis(Solution, n)\nresult",
75
+ "playground_assert": "assert_generate_parenthesis(result, expected)"
76
+ }
@@ -0,0 +1,96 @@
1
+ {
2
+ "problem_name": "interleaving_string",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "97",
5
+ "problem_title": "Interleaving String",
6
+ "difficulty": "Medium",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given strings `s1`, `s2`, and `s3`, find whether `s3` is formed by an **interleaving** of `s1` and `s2`.\n\nAn interleaving of two strings `s` and `t` is a configuration where `s` and `t` are divided into `n` and `m` substrings respectively, such that:\n\n- s = s1 + s2 + ... + sn\n- t = t1 + t2 + ... + tm\n- |n - m| <= 1\n- The interleaving is s1 + t1 + s2 + t2 + s3 + t3 + ... or t1 + s1 + t2 + s2 + t3 + s3 + ...\n\n**Note:** `a + b` is the concatenation of strings `a` and `b`.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "![Example 1](https://assets.leetcode.com/uploads/2020/09/02/interleave.jpg)\n\n```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbcbcac\"\nOutput: true\nExplanation: One way to obtain s3 is:\nSplit s1 into s1 = \"aa\" + \"bc\" + \"c\", and s2 into s2 = \"dbbc\" + \"a\".\nInterleaving the two splits, we get \"aadbbcbcac\".\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbbaccc\"\nOutput: false\nExplanation: Notice how it is hard to find a viable interleaving because s3 must preserve the character order of s1 and s2.\n```"
19
+ },
20
+ {
21
+ "content": "```\nInput: s1 = \"\", s2 = \"\", s3 = \"\"\nOutput: true\n```"
22
+ }
23
+ ]
24
+ },
25
+ "readme_constraints": "- 0 <= s1.length, s2.length <= 100\n- 0 <= s3.length <= 200\n- s1, s2, and s3 consist of lowercase English letters.",
26
+ "readme_additional": "",
27
+ "helpers_imports": "",
28
+ "helpers_content": "",
29
+ "helpers_run_name": "is_interleave",
30
+ "helpers_run_signature": "(solution_class: type, s1: str, s2: str, s3: str)",
31
+ "helpers_run_body": " implementation = solution_class()\n return implementation.is_interleave(s1, s2, s3)",
32
+ "helpers_assert_name": "is_interleave",
33
+ "helpers_assert_signature": "(result: bool, expected: bool) -> 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_is_interleave, run_is_interleave\nfrom .solution import Solution",
39
+ "test_content": "",
40
+ "test_class_name": "InterleavingString",
41
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
42
+ "_solution_methods": {
43
+ "list": [
44
+ {
45
+ "name": "is_interleave",
46
+ "signature": "(self, s1: str, s2: str, s3: str) -> bool",
47
+ "body": " # TODO: Implement is_interleave\n return False"
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_is_interleave",
64
+ "signature": "(self, s1: str, s2: str, s3: str, expected: bool)",
65
+ "parametrize": "s1, s2, s3, expected",
66
+ "test_cases": {
67
+ "list": [
68
+ "('aabcc', 'dbbca', 'aadbbcbcac', True)",
69
+ "('aabcc', 'dbbca', 'aadbbbaccc', False)",
70
+ "('', '', '', True)",
71
+ "('', '', 'a', False)",
72
+ "('a', '', 'a', True)",
73
+ "('', 'b', 'b', True)",
74
+ "('a', 'b', 'ab', True)",
75
+ "('a', 'b', 'ba', True)",
76
+ "('a', 'b', 'a', False)",
77
+ "('ab', 'cd', 'acbd', True)",
78
+ "('ab', 'cd', 'abcd', True)",
79
+ "('ab', 'cd', 'cdab', True)",
80
+ "('ab', 'cd', 'acdb', True)",
81
+ "('aa', 'ab', 'aaab', True)",
82
+ "('aa', 'ab', 'aaba', True)",
83
+ "('abc', 'def', 'abcdef', True)",
84
+ "('abc', 'def', 'adbecf', True)",
85
+ "('abc', 'def', 'defabc', True)"
86
+ ]
87
+ },
88
+ "body": " result = run_is_interleave(Solution, s1, s2, s3)\n assert_is_interleave(result, expected)"
89
+ }
90
+ ]
91
+ },
92
+ "playground_imports": "from helpers import run_is_interleave, assert_is_interleave\nfrom solution import Solution",
93
+ "playground_setup": "# Example test case\ns1 = 'aabcc'\ns2 = 'dbbca'\ns3 = 'aadbbcbcac'\nexpected = True",
94
+ "playground_run": "result = run_is_interleave(Solution, s1, s2, s3)\nresult",
95
+ "playground_assert": "assert_is_interleave(result, expected)"
96
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "problem_name": "multiply_strings",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "43",
5
+ "problem_title": "Multiply Strings",
6
+ "difficulty": "Medium",
7
+ "topics": "Math, String, Simulation",
8
+ "_tags": { "list": ["neetcode-150"] },
9
+ "readme_description": "Given two non-negative integers `num1` and `num2` represented as strings, return the product of `num1` and `num2`, also represented as a string.\n\n**Note:** You must not use any built-in BigInteger library or convert the inputs to integer directly.",
10
+ "_readme_examples": {
11
+ "list": [
12
+ { "content": "```\nInput: num1 = \"2\", num2 = \"3\"\nOutput: \"6\"\n```" },
13
+ { "content": "```\nInput: num1 = \"123\", num2 = \"456\"\nOutput: \"56088\"\n```" }
14
+ ]
15
+ },
16
+ "readme_constraints": "- 1 <= num1.length, num2.length <= 200\n- `num1` and `num2` consist of digits only.\n- Both `num1` and `num2` do not contain any leading zero, except the number `0` itself.",
17
+ "readme_additional": "",
18
+ "helpers_imports": "",
19
+ "helpers_content": "",
20
+ "helpers_run_name": "multiply",
21
+ "helpers_run_signature": "(solution_class: type, num1: str, num2: str)",
22
+ "helpers_run_body": " implementation = solution_class()\n return implementation.multiply(num1, num2)",
23
+ "helpers_assert_name": "multiply",
24
+ "helpers_assert_signature": "(result: str, expected: str) -> bool",
25
+ "helpers_assert_body": " assert result == expected\n return True",
26
+ "solution_imports": "",
27
+ "solution_contents": "",
28
+ "solution_class_content": "",
29
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_multiply, run_multiply\nfrom .solution import Solution",
30
+ "test_content": "",
31
+ "test_class_name": "MultiplyStrings",
32
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
33
+ "_solution_methods": {
34
+ "list": [
35
+ {
36
+ "name": "multiply",
37
+ "signature": "(self, num1: str, num2: str) -> str",
38
+ "body": " # TODO: Implement multiply\n return ''"
39
+ }
40
+ ]
41
+ },
42
+ "_test_helper_methods": {
43
+ "list": [{ "name": "setup_method", "parameters": "", "body": "self.solution = Solution()" }]
44
+ },
45
+ "_test_methods": {
46
+ "list": [
47
+ {
48
+ "name": "test_multiply",
49
+ "signature": "(self, num1: str, num2: str, expected: str)",
50
+ "parametrize": "num1, num2, expected",
51
+ "test_cases": {
52
+ "list": [
53
+ "('2', '3', '6')",
54
+ "('123', '456', '56088')",
55
+ "('0', '0', '0')",
56
+ "('0', '123', '0')",
57
+ "('123', '0', '0')",
58
+ "('1', '1', '1')",
59
+ "('9', '9', '81')",
60
+ "('99', '99', '9801')",
61
+ "('999', '999', '998001')",
62
+ "('123456789', '987654321', '121932631112635269')",
63
+ "('2', '50', '100')",
64
+ "('10', '10', '100')",
65
+ "('100', '100', '10000')",
66
+ "('5', '5', '25')",
67
+ "('123', '1', '123')",
68
+ "('1', '999', '999')"
69
+ ]
70
+ },
71
+ "body": " result = run_multiply(Solution, num1, num2)\n assert_multiply(result, expected)"
72
+ }
73
+ ]
74
+ },
75
+ "playground_imports": "from helpers import run_multiply, assert_multiply\nfrom solution import Solution",
76
+ "playground_setup": "# Example test case\nnum1 = '123'\nnum2 = '456'\nexpected = '56088'",
77
+ "playground_run": "result = run_multiply(Solution, num1, num2)\nresult",
78
+ "playground_assert": "assert_multiply(result, expected)"
79
+ }