leetcode-cli

Rust crate doc downloads telegram LICENSE

Installing

```sh

Required dependencies:

#

gcc

libssl-dev

libdbus-1-dev

libsqlite3-dev

cargo install leetcode-cli ```

Shell completions

For Bash and Zsh (by default picks up $SHELL from environment) sh eval "$(leetcode completions)" Copy the line above to .bash_profile or .zshrc

You may also obtain specific shell configuration using.

sh leetcode completions fish

Usage

Make sure you have logged in to leetcode.com with Firefox. See Cookies for why you need to do this first.

```sh leetcode 0.4.0 May the Code be with You 👻

USAGE: leetcode [FLAGS] [SUBCOMMAND]

FLAGS: -d, --debug debug mode -h, --help Prints help information -V, --version Prints version information

SUBCOMMANDS: data Manage Cache [aliases: d] edit Edit question by id [aliases: e] exec Submit solution [aliases: x] list List problems [aliases: l] pick Pick a problem [aliases: p] stat Show simple chart about submissions [aliases: s] test Edit question by id [aliases: t] help Prints this message or the help of the given subcommand(s) ```

Example

For example, given this config (could be found at ~/.leetcode/leetcode.toml):

```toml [code] editor = 'emacs'

Optional parameter

editor-args = ['-nw'] lang = 'rust'

[cookies] csrf = '' session = ''

[storage] cache = 'Problems' code = 'code' root = '~/.leetcode' scripts = 'scripts' ```

1. pick

sh leetcode pick 1

sh leetcode pick --name "Two Sum"

```sh [1] Two Sum is on the run...

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.


Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. ```

2. edit

sh leetcode edit 1

```rust

struct Solution;

impl Solution { pub fn two_sum(nums: Vec, target: i32) -> Vec { use std::collections::HashMap; let mut m: HashMap = HashMap::new();

    for (i, e) in nums.iter().enumerate() {
        if let Some(v) = m.get(&(target - e)) {
            return vec![*v, i as i32];
        }

        m.insert(*e, i as i32).unwrap_or_default();
    }

    return vec![];
}

} ```

3. test

sh leetcode test 1

```sh

Accepted Runtime: 0 ms

Your input: [2,7,11,15], 9 Output: [0,1] Expected: [0,1]

```

4. exec

sh leetcode exec 1

```sh

Success

Runtime: 0 ms, faster than 100% of Rustonline submissions for Two Sum.

Memory Usage: 2.4 MB, less than 100% of Rustonline submissions for Two Sum.

```

Cookies

The cookie plugin of leetcode-cli can work on OSX and Linux. If you are on a different platform, there are problems with caching the cookies, you can manually input your LeetCode Cookies to the configuration file.

toml [cookies] csrf = "..." session = "..."

For Example, using Firefox (after logging in to LeetCode):

Step 1

Open Firefox, press F12, and click Storage tab.

Step 2

Expand Cookies tab on the left and select https://leetcode.com.

Step 2

Copy Value from LEETCODE_SESSION and csrftoken to session and csrf in your configuration file, respectively:

toml [cookies] csrf = "${csrftoken}" session = "${LEETCODE_SESSION}"

Programmable

If you want to filter LeetCode questions using custom Python scripts, add the following to your the configuration file:

toml [storage] scripts = "scripts"

Then write the script:

```python

~/.leetcode/scripts/plan1.py

import json;

def plan(sps, stags): ## # print in python is supported, # if you want to know the data structures of these two args, # just print them ## problems = json.loads(sps) tags = json.loads(stags)

ret = []
tm = {}
for tag in tags:
    tm[tag["tag"]] = tag["refs"];

for i in problems:
    if i["level"] == 1 and str(i["id"]) in tm["linked-list"]:
        ret.append(str(i["id"]))

# return is `List[string]`
return ret

```

Then run list with the filter that you just wrote:

sh leetcode list -p plan1

That's it! Enjoy!

Contributions

Feel free to add your names and emails in the authors field of Cargo.toml !

LICENSE

MIT