19 个版本 (7 个稳定版本)

1.2.6 2024年3月28日
1.2.5 2024年3月25日
1.2.4 2023年9月9日
1.0.2 2022年1月17日
0.1.16 2020年11月19日

#320 in 命令行工具

MIT/ApacheLGPL-3.0

115KB
3K SLoC

如果你使用 neovim,尝试这个 Neovim 插件 leetup.nvim

crates Downloads CI

解决 Leetcode 问题

安装

  • MacOS
brew install leetup
  • Linux
    发行版 下载。解压文件并设置 PATH。
  • Cargo
cargo install leetup
  • Windows
    发行版 下载。解压 x86_64 windows 目标文件。

注意:您需要将 leetup.exe 添加到 PATH 以从命令提示符访问。

快速入门

  • 使用 Cookie 登录:leetup user -c

    • 您需要先在 leetcode.com 上登录。
    • 从浏览器中 cookie 存储中复制 csrftokenLEETCODE_SESSION
  • 选择一个问题:leetup pick -l python 1

  • 测试一个问题:leetup test two-sum.py -t "[1,2]\n3" 或通过 stdin 重定向测试数据

    leetup test 3sum.java -t << END
    [1,-1,0]
    [0, 1, 1, 1, 2, -3, -1]
    [1,2,3]
    END
    
  • 提交一个问题:leetup submit two-sum.py

  • 列出/显示问题:leetup list

    • 通过关键字搜索:leetup list <keyword>
    • 查询简单:leetup list -q e
    • 按 ID、标题、难度排序:leetup list -qE -oIdT
  • 更多命令

注入代码片段

您可以将常用代码片段注入到生成的代码文件中的特定位置。例如:每种语言的常用库导入可以放入配置中。《Leetup》会将其提取并插入到生成的文件中。

配置

创建 ~/.leetup/config.json 并根据您的喜好进行自定义

{
    "lang": "java",
    "inject_code": {
        "rust": {
            "before_code": ["use std::rc::Rc;", "use std::collections::{HashMap, VecDeque};", "use std::cell::RefCell;"],
            "before_code_exclude": ["// Test comment", "// Test code"],
            "after_code": "\nstruct Solution; \n\nfn main() {\n    let solution = Solution::$func();\n\n}\n",
            "before_function_definition": null
        },
        "java": {
            "before_code": "import java.util.*;",
            "before_code_exclude": ["// Test comment", "// Test code"],
            "after_code": null,
            "before_function_definition": null
        },
        "python3": {
            "before_code": "import math",
            "before_code_exclude": ["# Test comment", "# Test code"],
            "after_code": ["if __name__ = \"__main__\":", "    solution = Solution()"],
            "before_function_definition": null
        }
    }
}

生成的Rust代码看起来像这样

// @leetup=custom
// @leetup=info id=1 lang=rust slug=two-sum

/*
* [SNIP]
*/
// @leetup=custom

// @leetup=inject:before_code_ex
// Test comment
// Test code
// @leetup=inject:before_code_ex

// @leetup=code

// @leetup=inject:before_code
use std::cell::RefCell;
use std::collections::{HashMap, VecDeque};
use std::rc::Rc;
// @leetup=inject:before_code

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {}
}
// @leetup=code

// @leetup=inject:after_code
// This is helpful when you want to run this program locally
// and avoid writing this boilerplate code for each problem.
struct Solution;

fn main() {
    let solution = Solution::two_sum();
}

// @leetup=inject:after_code

在测试和提交到LeetCode时,只有位于 @leetup=code 之间的代码块会被提交

// @leetup=inject:before_code
use std::cell::RefCell;
use std::collections::{HashMap, VecDeque};
use std::rc::Rc;
// @leetup=inject:before_code

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
    }
}

其他将被忽略!

为Pick配置钩子脚本

在代码生成前后运行脚本。当您想要在生成的文件周围获得更多便捷性时非常有用,例如:创建目录、将生成的文件移动到目录中、重命名等。配置中的 @leetup=working_dir 将被替换为 working_dir
@leetup=problem 将被替换为当前问题标题,例如 two-sum

{
    "lang": "rust",
    "inject_code": {
        ...SNIP...
    },
    "pick_hook": {
        "rust": {
            "working_dir": "~/lc/rust",
            "script": {
                "pre_generation": ["cd @leetup=working_dir; mkdir -p @leetup=problem"],
                "post_generation": ["mv @leetup=working_dir/@leetup=problem.rs @leetup=working_dir/@leetup=problem/Solution.rs"]
            }
        },
        "java": {
            "working_dir": "~/lc/java",
            "script": {
                "pre_generation": ["cd @leetup=working_dir", "mvn archetype:generate -DartifactId=@leetup=problem  -DgroupId=leetup  -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false"], 
                "post_generation": ["mv @leetup=working_dir/@leetup=problem.java @leetup=working_dir/@leetup=problem/src/main/java/App.java"]
            }
        }
    }
}

致谢

本项目灵感来源于:[https://github.com/leetcode-tools/leetcode-cli](https://github.com/leetcode-tools/leetcode-cli)

依赖项

~14–29MB
~456K SLoC