Skip to main content

A CLI app to run any given Leetcode python solution.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_leetcode_runner-1.0.9.tar.gz (6.6 kB view hashes)

Uploaded Source

Built Distribution

python_leetcode_runner-1.0.9-py3-none-any.whl (8.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page