这是一个用于管理和组织 Codewars Rust 题目的工作空间。
rust-codewars/
├── Cargo.toml # Workspace 配置
├── add_kata.sh # 自动添加题目脚本
├── migrate_katas.sh # 迁移旧题目脚本
└── katas/ # 所有题目
├── 1kyu/ # 1 kyu 难度题目
├── 2kyu/ # 2 kyu 难度题目
├── 3kyu/ # 3 kyu 难度题目
├── 4kyu/ # 4 kyu 难度题目
├── 5kyu/ # 5 kyu 难度题目
├── 6kyu/ # 6 kyu 难度题目
├── 7kyu/ # 7 kyu 难度题目
└── 8kyu/ # 8 kyu 难度题目
└── 000_kata_name_kata_id/
├── Cargo.toml
└── src/
├── lib.rs # 原始代码和测试
└── review_N.rs # 复习版本(可选)
每个题目目录格式:{本地编号}_{题目名}_{kata_id}
例如:005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a
- 本地编号: 三位数字,从 000 开始递增
- 题目名: 小写字母和下划线,从题目名称转换而来
- kata_id: Codewars 题目的唯一标识符(16 位十六进制)
./add_kata.sh <kata_id>示例:
./add_kata.sh 5541f58a944b85ce6d00006a脚本会自动:
- 从 Codewars API 获取题目信息(名称、难度)
- 在对应难度目录下创建题目结构
- 分配下一个可用的本地编号
- 生成带有题目元信息的
lib.rs模板
接下来你需要:
- 打开生成的
lib.rs文件 - 从 Codewars 复制测试用例到
#[cfg(test)]模块 - 实现
solution函数或其他要求的函数 - 运行测试验证
当 Codewars 给你相同题目进行复习时:
./add_kata.sh <kata_id> --review示例:
./add_kata.sh 5541f58a944b85ce6d00006a --review这会在原题目的 src/ 目录下创建 review_1.rs、review_2.rs 等文件,并自动配置为可执行的 bin target。
测试单个题目:
cargo test -p kata_<package_name>示例:
cargo test -p kata_005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a测试复习版本:
cargo test -p kata_<package_name> --bin review_1测试所有题目:
cargo test测试特定难度的所有题目:
cargo test --workspace --package 'kata_*5kyu*'构建所有题目:
cargo build构建单个题目:
cargo build -p kata_<package_name>//! Title: Product of consecutive Fib numbers
//! Link: https://www.codewars.com/kata/5541f58a944b85ce6d00006a
//! Kata ID: 5541f58a944b85ce6d00006a
//! Rank: 5kyu
//! Completed: 2025-12-02
pub fn solution() {
unimplemented!()
}
#[cfg(test)]
mod tests {
use super::*;
// 在这里粘贴从 Codewars 复制的测试代码
}//! Review #1
//! Date: 2025-12-02
pub fn solution() {
unimplemented!()
}
#[cfg(test)]
mod tests {
use super::*;
// 在这里粘贴测试代码
}Codewars 使用 kyu 系统表示难度:
- 8 kyu: 最简单,适合初学者
- 7 kyu: 简单
- 6 kyu: 中等偏易
- 5 kyu: 中等
- 4 kyu: 中等偏难
- 3 kyu: 困难
- 2 kyu: 非常困难
- 1 kyu: 极其困难
数字越小,难度越高。
复习功能允许你在不覆盖原始代码的情况下重新做同一道题。这对于巩固知识和比较不同解法很有帮助。
特点:
- 原始代码保留在
lib.rs中 - 复习代码存放在
review_N.rs中(N = 1, 2, 3...) - 每个复习版本都可以独立运行测试
- 自动配置为 bin target,方便单独测试
使用场景:
- Codewars 推荐你复习已完成的题目
- 想用不同方法重新实现
- 学习新知识后想优化旧代码
-
获取题目 ID
- 从 Codewars 题目 URL 获取
- 例如:
https://www.codewars.com/kata/5541f58a944b85ce6d00006a - ID 为:
5541f58a944b85ce6d00006a
-
添加题目
./add_kata.sh 5541f58a944b85ce6d00006a
-
编辑代码
- 打开生成的
lib.rs - 从 Codewars 复制测试用例
- 实现解决方案
- 打开生成的
-
运行测试
cargo test -p kata_005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a -
提交到 Codewars
- 测试通过后,复制代码到 Codewars 提交
-
创建复习版本
./add_kata.sh 5541f58a944b85ce6d00006a --review
-
编辑复习代码
- 打开生成的
review_1.rs - 复制测试用例(可以从原
lib.rs复制) - 重新实现解决方案
- 打开生成的
-
运行复习测试
cargo test -p kata_005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a --bin review_1 -
对比两种解法
- 查看
lib.rs和review_1.rs的不同 - 学习和总结
- 查看
# 添加新题目
./add_kata.sh <kata_id>
# 添加复习版本
./add_kata.sh <kata_id> --review
# 测试单个题目
cargo test -p kata_<package_name>
# 测试所有题目
cargo test
# 构建所有题目
cargo build
# 清理构建产物
cargo clean
# 查看所有题目
find katas -name "lib.rs" -type f
# 查看特定难度的题目
ls katas/5kyu/
# 统计题目数量
find katas -name "lib.rs" -type f | wc -l- Kata ID 获取: 从 Codewars 题目 URL 的最后一段获取
- 包名限制: Rust 包名不能以数字开头,所以所有包名都添加了
kata_前缀 - Edition: 默认使用 Rust 2021 edition
- 依赖管理: 如果题目需要外部依赖,手动编辑对应的
Cargo.toml - 测试隔离: 每个题目都是独立的 crate,测试互不干扰
问题:找不到题目
- 检查 kata ID 是否正确
- 确认题目支持 Rust 语言
问题:构建失败
- 运行
cargo clean清理缓存 - 检查 Cargo.toml 中的 members 是否正确
问题:测试失败
- 确认测试用例已正确粘贴
- 检查函数签名是否与题目要求一致
你可以根据需要扩展此工作空间:
- 添加 CI/CD: 使用 GitHub Actions 自动运行测试
- 性能测试: 添加 criterion 进行性能基准测试
- 代码统计: 使用 tokei 统计代码行数
- 自动格式化: 配置 rustfmt 和 clippy
Happy Coding! 🦀
如果你忘记之前是否做过某题,不用担心会覆盖旧代码!系统有三重保护:
- 文件系统检测 - 扫描所有目录查找重复
- 索引文件检测 - 维护
.kata_index记录所有题目 - 友好提示 - 详细显示已有题目的信息和复习次数
在添加题目前,快速检查是否做过:
./manage_kata.sh check <kata_id>示例:
$ ./manage_kata.sh check 5541f58a944b85ce6d00006a
✅ 已完成这道题
详细信息:
题目ID: 5541f58a944b85ce6d00006a
题目名称: product of consecutive fib numbers
难度: 5kyu
路径: katas/5kyu/005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a
完成日期: 2025-12-02
复习次数: 2./manage_kata.sh index这会显示所有做过题目的完整列表。
详细信息请查看 DUPLICATE_PROTECTION.md