leetcode-cli
Installing
# 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)
eval "$(leetcode completions)"
Copy the line above to .bash_profile
or .zshrc
You may also obtain specific shell configuration using.
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.
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
):
[code]
editor = 'emacs'
# Optional parameter
editor-args = ['-nw']
lang = 'rust'
[cookies]
csrf = '<your-leetcode-csrf-token>'
session = '<your-leetcode-session-key>'
[storage]
cache = 'Problems'
code = 'code'
root = '~/.leetcode'
scripts = 'scripts'
1. pick
leetcode pick 1
leetcode pick --name "Two Sum"
[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 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:
[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
That's it! Enjoy!
Contributions
Feel free to add your names and emails in the authors
field of Cargo.toml
!
LICENSE
MIT