Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

theidexisted/leetcode-cli

Repository files navigation

leetcode-cli

Rust crate doc downloads gitter LICENSE

Installing

# Required dependencies:
# 
# gcc
# libssl-dev
# libdbus-1-dev
# libsqlite3-dev
cargo install leetcode-cli

Usage

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

leetcode 0.3.10
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 (can be found in ~/.leetcode/leetcode.toml):

[code]
lang = "rust"
editor = "emacs"

1. pick

leetcode pick 1
[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

leetcode edit 1
# struct Solution;
impl Solution {
 pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
 use std::collections::HashMap;
 let mut m: HashMap<i32, i32> = 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

leetcode test 1
 Accepted Runtime: 0 ms
 Your input: [2,7,11,15], 9
 Output: [0,1]
 Expected: [0,1]

4. exec

leetcode exec 1
 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.

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

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

Step 1

Open Chrome and navigate to the link below:

chrome://settings/cookies/detail?site=leetcode.com

Step 2

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

[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:

[storage]
scripts = "scripts"

Then write the script:

# ~/.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:

leetcode list -p plan1

And that's it! Enjoy!

PR

PRs are more than welcome!

LICENSE

MIT

About

May the code be with you πŸ‘»

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 97.2%
  • Nix 2.4%
  • Shell 0.4%

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /