Skip to content

tusharsadhwani/python_leetcode_runner

Repository files navigation

python_leetcode_runner

Test your leetcode Python solutions locally.

demo image

Installation

pip install python-leetcode-runner

Usage

I have a beginner's guide over here

Say your solution file add_numbers.py looks like this:

class Solution:
    def addNumbers(self, x: int, y: int) -> int:
        return x + y

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, x: int, y: int) -> int:
        return x + y

tests = [
    (
        (2, 4,),      # input tuple
        6,            # output
    ),
    (
        (45, 67,),    # input tuple
        112,          # 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 function
  • inputs: your test inputs tuple
  • expected: your expected test output value

To make assertions, you have to use assert statements in the following way:

assert output == expected, (output, expected)  # this tuple is important!

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, expected):
    nums = inputs[0]
    output = addNumbers(nums)
    assert output == expected, (output, expected)

Here's a more elaborate 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(removeDuplicates, inputs, outputs):
    nums, = inputs
    length, expected = outputs

    new_length = removeDuplicates(nums)

    assert length == new_length, (length, new_length)
    assert nums[:new_length] == expected, (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.

About

Test your leetcode Python solutions locally.

Topics

Resources

License

Stars

Watchers

Forks

Languages