Skip to content

somnus0917/codewars-rust

Repository files navigation

Rust Codewars 刷题工作空间

这是一个用于管理和组织 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 位十六进制)

使用方法

1. 添加新题目

./add_kata.sh <kata_id>

示例:

./add_kata.sh 5541f58a944b85ce6d00006a

脚本会自动:

  • 从 Codewars API 获取题目信息(名称、难度)
  • 在对应难度目录下创建题目结构
  • 分配下一个可用的本地编号
  • 生成带有题目元信息的 lib.rs 模板

接下来你需要:

  1. 打开生成的 lib.rs 文件
  2. 从 Codewars 复制测试用例到 #[cfg(test)] 模块
  3. 实现 solution 函数或其他要求的函数
  4. 运行测试验证

2. 添加复习版本

当 Codewars 给你相同题目进行复习时:

./add_kata.sh <kata_id> --review

示例:

./add_kata.sh 5541f58a944b85ce6d00006a --review

这会在原题目的 src/ 目录下创建 review_1.rsreview_2.rs 等文件,并自动配置为可执行的 bin target。

3. 运行测试

测试单个题目:

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*'

4. 构建项目

构建所有题目:

cargo build

构建单个题目:

cargo build -p kata_<package_name>

题目文件模板

lib.rs 结构

//! 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_N.rs 结构

//! 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,方便单独测试

使用场景:

  1. Codewars 推荐你复习已完成的题目
  2. 想用不同方法重新实现
  3. 学习新知识后想优化旧代码

工作流程示例

完整的做题流程

  1. 获取题目 ID

    • 从 Codewars 题目 URL 获取
    • 例如:https://www.codewars.com/kata/5541f58a944b85ce6d00006a
    • ID 为:5541f58a944b85ce6d00006a
  2. 添加题目

    ./add_kata.sh 5541f58a944b85ce6d00006a
  3. 编辑代码

    • 打开生成的 lib.rs
    • 从 Codewars 复制测试用例
    • 实现解决方案
  4. 运行测试

    cargo test -p kata_005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a
  5. 提交到 Codewars

    • 测试通过后,复制代码到 Codewars 提交

复习流程

  1. 创建复习版本

    ./add_kata.sh 5541f58a944b85ce6d00006a --review
  2. 编辑复习代码

    • 打开生成的 review_1.rs
    • 复制测试用例(可以从原 lib.rs 复制)
    • 重新实现解决方案
  3. 运行复习测试

    cargo test -p kata_005_product_of_consecutive_fib_numbers_5541f58a944b85ce6d00006a --bin review_1
  4. 对比两种解法

    • 查看 lib.rsreview_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

注意事项

  1. Kata ID 获取: 从 Codewars 题目 URL 的最后一段获取
  2. 包名限制: Rust 包名不能以数字开头,所以所有包名都添加了 kata_ 前缀
  3. Edition: 默认使用 Rust 2021 edition
  4. 依赖管理: 如果题目需要外部依赖,手动编辑对应的 Cargo.toml
  5. 测试隔离: 每个题目都是独立的 crate,测试互不干扰

故障排查

问题:找不到题目

  • 检查 kata ID 是否正确
  • 确认题目支持 Rust 语言

问题:构建失败

  • 运行 cargo clean 清理缓存
  • 检查 Cargo.toml 中的 members 是否正确

问题:测试失败

  • 确认测试用例已正确粘贴
  • 检查函数签名是否与题目要求一致

扩展功能

你可以根据需要扩展此工作空间:

  1. 添加 CI/CD: 使用 GitHub Actions 自动运行测试
  2. 性能测试: 添加 criterion 进行性能基准测试
  3. 代码统计: 使用 tokei 统计代码行数
  4. 自动格式化: 配置 rustfmt 和 clippy

Happy Coding! 🦀

防止重复添加

自动保护机制

如果你忘记之前是否做过某题,不用担心会覆盖旧代码!系统有三重保护:

  1. 文件系统检测 - 扫描所有目录查找重复
  2. 索引文件检测 - 维护 .kata_index 记录所有题目
  3. 友好提示 - 详细显示已有题目的信息和复习次数

快速检查

在添加题目前,快速检查是否做过:

./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

About

my code wars

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors