A CLI app to run any given Leetcode python solution.
Project description
python_leetcode_runner
Test your leetcode Python solutions locally.
Installation
pip install python-leetcode-runner
Usage
Say your solution file add_numbers.py
looks like this:
class Solution:
def addNumbers(self, nums: List[int]) -> int:
return sum(nums)
All you need to add to the file is a few test cases, usually provided to you in the leetcode question description:
class Solution:
def addNumbers(self, nums: List[int]) -> int:
return sum(nums)
tests = [
(
([1, 2, 3],), # input tuple
6, # output
),
(
([4, 5, 6, 7],), # input tuple
22, # output
),
]
Now, run the code locally by doing:
> pyleet add_numbers.py
Test 1 - ([1, 2, 3])......................................................PASSED
Test 2 - ([4, 5, 6, 7])...................................................PASSED
Custom Validators
In some questions, you don't just have to match expected output with function output. For eg, in some questions it might ask you to modify a list in-place, or some questions might have many acceptable answers.
For that case, you can provide your own custom validator
function.
A validator is a function that receives 3 arguments:
method
: your leetcode solution functioninputs
: your test inputs tupleoutput
: your test output value
For example, let's add custom validation to the addNumbers
method:
class Solution:
def addNumbers(self, nums: List[int]) -> int:
return sum(nums)
tests = [
(
([1, 2, 3],), # input tuple
6, # output
),
(
([4, 5, 6, 7],), # input tuple
22, # output
),
]
def validator(addNumbers, inputs, output):
nums = inputs[0]
assert addNumbers(nums) == output
Here's a more sensible example, remove_duplicates:
class Solution:
def removeDuplicates(self, nums: list[int]) -> int:
offset = 0
values: set[int] = set()
for index, num in enumerate(nums):
nums[index - offset] = num
if num in values:
offset += 1
else:
values.add(num)
new_length = len(nums) - offset
return new_length
tests = [
(
([1, 1, 2],),
(2, [1, 2]),
),
(
([0, 0, 1, 1, 1, 2, 2, 3, 3, 4],),
(5, [0, 1, 2, 3, 4]),
),
]
def validator(method, inputs, outputs):
nums, = inputs
length, expected = outputs
new_length = method(nums)
assert length == new_length
assert nums[:new_length] == expected
Run the file against sample inputs by doing:
> pyleet remove_duplicates.py
Test 1 - ([1, 2, 2])......................................................PASSED
Test 2 - ([0, 1, 2, 3, 4, 2, 2, 3, 3, 4]).................................PASSED
Code Snippets
If you're using VSCode, you can use the provided code snippets to help write the test cases faster.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python_leetcode_runner-1.0.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1c0a14876b867f7f20163322f743135c097b35b814a1e57aba790108d89f24f |
|
MD5 | 02103b636d475d75b35e7f1c61c18d6f |
|
BLAKE2b-256 | e3dc32246c9597b802c250aa4d545121c1754f3a66db13797791c16d19514db4 |
Hashes for python_leetcode_runner-1.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9ed4c0221c9ec8828b45f233c06b6af016c651138d26e9220686fadb5deba03 |
|
MD5 | 4acaf77fbd851cdaf0a953b9cf8efed9 |
|
BLAKE2b-256 | a6c2c48deaea71006fff7b356b453c2a5cddff0ee23dfdedf395a2950730e70e |