本来想老老实实刷下 leetcode 年后认认真真找个工作...结果 20 道没刷够就跑神写了这个 proj,蛮有意思的,参考了 skygragon 大牛的 node 版本,在里面添了个 python 解释器,可以通过 python 脚本过滤题目。
(粘一下 README 过来...)
leetcode-cli
Features
- [x] the edit flow —— solution files will generate automatically!
- [x] support python scripts to filter questions
- [ ] doc support,
lc-rs
can compile the annotation of your solutions to markdown!- [ ] support local signal to keep coding as longer as you want.
Building
cargo install leetcode-cli
Usage
Please make sure you have logined in
leetcode.com
withchrome
, more info plz checkout thisleetcode 0.2.6 clearloop <udtrokia@163.com> Here's to the crazy ones 👻 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, if your config is:
[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
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. submit
leetcode submit 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-cil can work on OSX and Linux, If you are on other platforms or your cookies just don't want to be catched, you can handwrite your LeetCode Cookies to
~/.leetcode/leetcode.toml
# Make sure `leetcode.toml` file is placed at `~/.leetcode/leetcode.toml` [cookies] csrf = "..." session = "..."
For Example, if you're using chrome to login to leetcode.com.
Step 1
Open chrome and paste the link below to the
chrome linkbar
.chrome://settings/cookies/detail?site=leetcode.com
Step 2
Copy the contents of
LEETCODE_SESSION
andcsrftoken
.Step 3
Paste them to
session
andcsrf
.# Make sure `leetcode.toml` file is placed at `~/.leetcode/leetcode.toml` [cookies] csrf = "${csrftoken}" session = "${LEETCODE_SESSION}"
Programmable
If we want to filter leetcode questions using our own python scripts, what should we do?
For example, our config is:
# Make sure `leetcode.toml` file is placed at `~/.leetcode/leetcode.toml` [storage] scripts = "scripts"
We write our python scripts:
# ~/.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 we can run filter as what we write now:
leetcode list -p plan1
Well done, enjoy it!
PR
PR is welcome, here it is.
LICENSE
MIT
欢迎来提 issues 和 pr~
计划是在这一个多月内达到 medium 不卡壳的难度,如果碰巧有小伙伴这阵子也在刷 leetcode,请联系小子,求搭伙儿!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.