Skip to content

CjhHa1/CodeLearning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

算法学习助手 (Code Learning Agent)

🤖 Claude Code 集成版 - 通过自然语言与 AI 助手交互,轻松管理算法学习

一个集成了题目爬取、学习统计和智能学习计划的算法学习工具集,深度集成 Claude Code,支持通过自然语言进行所有操作。

✨ 核心特性

🎯 Claude Code 深度集成

  • 自然语言交互: 无需记忆命令,直接用中文或英文描述需求
  • 智能技能系统: 4 个专业技能自动识别你的意图
  • 上下文感知: Claude 理解你的学习进度和目标
  • 工作流自动化: 从爬取到统计,一句话完成整个流程

📚 三大核心模块

  1. 洛谷爬虫 (luogu-scraper)

    • 爬取洛谷题单、题目和题解
    • 支持官方题单和单题爬取
    • JSON + Markdown 双格式输出
  2. LeetCode 爬虫 (leetcode-scraper)

    • 爬取 LeetCode 题目和题解
    • 新增: 题目列表爬取(学习计划、公司题库、主题集合)
    • 支持国际站和中国站
    • GraphQL API,稳定高效
  3. 学习统计与计划 (stats)

    • 生成学习进度统计
    • 新增: 智能学习计划管理
    • 新增: 个性化题目调度算法
    • 自动进度跟踪

🤖 Claude Code 集成指南

什么是 Claude Code Skills?

Claude Code Skills 是 Claude Code 的扩展系统,允许你通过自然语言与 AI 助手交互来完成复杂任务。本项目提供了 4 个专业技能,让你可以用对话的方式管理算法学习。

优势

  • ✅ 无需记忆复杂命令
  • ✅ 自然语言描述需求
  • ✅ AI 理解上下文和意图
  • ✅ 自动化工作流程
  • ✅ 智能错误处理和建议

📦 安装步骤

1. 克隆项目

git clone <repository-url>
cd CodeLearningAgent

2. 安装 Python 依赖

# 洛谷爬虫依赖
cd luogu_scraper
pip install -r requirements.txt

# LeetCode爬虫依赖
cd ../leetcode_scraper
pip install -r requirements.txt

# 返回项目根目录
cd ..

依赖说明

  • beautifulsoup4: HTML 解析
  • lxml: XML/HTML 解析器
  • requests: HTTP 请求
  • html2text: HTML 转 Markdown

3. 配置 Cookie(洛谷必需)

编辑 luogu_scraper/config.py

COOKIE = '_uid=xxx; __client_id=xxx; ...'

获取 Cookie 步骤

  1. 登录 洛谷
  2. 打开浏览器开发者工具 (F12)
  3. 切换到 Network 标签
  4. 刷新页面
  5. 选择任意请求,在 Headers 中找到 Cookie
  6. 复制完整的 Cookie 值并粘贴到配置文件

LeetCode Cookie(可选)

  • 编辑 leetcode_scraper/config.py
  • 仅访问会员题目时需要

4. 验证技能安装

检查技能文件是否存在:

ls -la .claude/skills/

应该看到:

luogu-scraper/
leetcode-scraper/
learning-stats/
learning-plans/

每个目录下都应该有 SKILL.md 文件。

5. 启动 Claude Code

在项目根目录启动:

claude-code

或者如果你使用 VS Code 集成:

  • 打开项目文件夹
  • Claude Code 会自动检测 .claude/skills/ 目录
  • 技能会自动加载

6. 验证技能加载

在 Claude Code 中输入:

"列出所有可用的技能"

或者直接测试:

"列出 LeetCode 中等难度的前 10 道题"

如果 Claude 能够理解并执行,说明技能已成功加载!

🎨 可用技能详解

项目包含 4 个专业技能,每个技能负责特定的功能领域:

1. 🔧 luogu-scraper - 洛谷爬虫

功能: 爬取洛谷题单、题目和题解

触发词:

  • "爬取洛谷"
  • "获取洛谷题目"
  • "洛谷题单"
  • "P1001"(题目编号)
  • "洛谷入门题单"

使用示例:

"爬取洛谷入门题单"
"获取洛谷题目 P1001"
"爬取洛谷题单1,包含前5个题解"
"下载洛谷题单2的所有题目"

输出位置: luogu_scraper/output/

2. 🔧 leetcode-scraper - LeetCode爬虫

功能: 爬取 LeetCode 题目、题解和题目列表

触发词:

  • "爬取LeetCode"
  • "列出LeetCode"
  • "study plan"
  • "company problems"
  • "two-sum"(题目 slug)

使用示例:

"列出 LeetCode 中等难度的前 20 道题"
"爬取 two-sum 题目"
"获取 Top Interview 150 学习计划"
"爬取 Google 公司的 200 道题"
"列出所有可用的题目来源"
"爬取动态规划主题的 100 道题"

新功能 - 题目列表爬取:

  • 官方学习计划:Top Interview 150, LeetCode 75, SQL 50 等
  • 公司题库:Google, Amazon, Microsoft, Facebook, Apple 等
  • 主题集合:动态规划、树、图、数组、字符串等
  • 难度分类:Easy, Medium, Hard
  • 高频题目:按点赞数排序

输出位置: leetcode_scraper/output/

3. 📊 learning-stats - 学习统计

功能: 生成和分析学习统计数据

触发词:

  • "生成统计"
  • "查看进度"
  • "学习报告"
  • "我学了多少题"
  • "分析学习数据"

使用示例:

"生成学习统计"
"查看我的学习进度"
"分析学习数据"
"统计题目分类"
"查看学习报告"

统计内容:

  • 总体统计(总题目数、已学习数、进度百分比)
  • 分类统计(每个分类的学习情况)
  • 标签统计(题目标签分布)
  • 难度统计(不同难度的分布)
  • 每日统计(学习时间线)
  • 学习计划统计(新增)

输出位置: stats/data/stats.json

4. 📅 learning-plans - 学习计划(新功能!)

功能: 创建和管理个性化学习计划

触发词:

  • "创建学习计划"
  • "今天的题目"
  • "学习进度"
  • "导出计划"
  • "查看学习计划"

使用示例:

"创建一个 30 天的面试准备计划,使用 Top Interview 150"
"查看今天的学习任务"
"查看学习计划进度"
"导出学习计划到 Markdown"
"列出所有学习计划"
"删除学习计划 plan_001"

核心特性:

  • 智能调度算法: 基于频率(40%)、难度(30%)、主题多样性(30%)评分
  • 难度递进: 从简单到困难,循序渐进
  • 主题均衡: 避免连续相同主题,保持学习多样性
  • 自动跳过: 自动过滤已学习题目
  • 进度跟踪: 实时跟踪完成率和进度状态
  • 灵活导出: 导出 Markdown 格式,方便打印

输出位置: stats/data/learning_plan.json

💡 使用场景示例

场景 1: 面试准备(30 天冲刺)

完整对话流程:

你: "我想准备面试,帮我获取 Top Interview 150 题目列表"
Claude: [自动触发 leetcode-scraper 技能]
        [爬取题目列表]
        ✅ 已获取 150 道题目

你: "创建一个 30 天的学习计划,从明天开始"
Claude: [自动触发 learning-plans 技能]
        [创建计划,智能分配每日任务]
        ✅ 已创建计划 plan_001
        📅 每天 5 道题,难度递进,主题均衡

你: "查看今天的题目"
Claude: [显示今日 5 道题目]
        1. Two Sum (Easy) - Array, Hash Table
        2. Add Two Numbers (Medium) - Linked List
        3. Longest Substring (Medium) - String, Sliding Window
        4. Container With Most Water (Medium) - Array, Two Pointers
        5. Valid Parentheses (Easy) - String, Stack

你: "爬取第一题 Two Sum 的详细信息和题解"
Claude: [爬取题目详情和高赞题解]
        ✅ 已保存到 output/problems/0001_two-sum/

[完成学习后]

你: "我完成了第一题 Two Sum,笔记:哈希表解法,时间复杂度O(n)"
Claude: [自动触发 learning-stats 技能]
        [标记为已学习,更新进度]
        ✅ 已标记 Two Sum 为已学习
        📋 已更新学习计划 plan_001
        📊 进度: 1/150 (0.67%)

你: "查看学习进度"
Claude: [显示详细进度]
        📊 学习计划: Interview Prep - 30 Days
        ✅ 已完成: 1/150 (0.67%)
        📅 已过天数: 1/30
        🎯 状态: 按计划进行

场景 2: 公司定向准备

你: "帮我爬取 Google 公司的前 200 道高频题"
Claude: [爬取 Google 题库]
        ✅ 已获取 200 道 Google 高频题

你: "创建 Google 面试准备计划,45 天,优先高频题"
Claude: [创建计划,高频题优先]
        ✅ 已创建计划 plan_002
        📅 每天 4-5 道题,高频题优先

你: "导出计划到 Markdown,我要打印出来"
Claude: [生成 Markdown 文件]
        ✅ 已导出到 google_interview_plan.md

场景 3: 主题专项突破

你: "我想专门学习动态规划,帮我获取 100 道 DP 题目"
Claude: [爬取动态规划主题题目]
        ✅ 已获取 100 道动态规划题目

你: "创建 DP 学习计划,2 个月,难度递进"
Claude: [创建计划,从简单到困难]
        ✅ 已创建计划 plan_003
        📅 每天 1-2 道题,难度递进

你: "查看学习统计,分析我的薄弱环节"
Claude: [生成统计,指出需要加强的标签]
        📊 统计分析:
        - 动态规划: 15/100 (15%)
        - 薄弱标签: 状态压缩DP, 树形DP
        💡 建议: 重点学习状态压缩和树形DP

场景 4: 日常学习流程

你: "查看今天的学习任务"
Claude: [显示今日题目]
        📅 今日任务 (2026-01-30):
        1. LRU Cache (Medium)
        2. Binary Tree Level Order (Medium)
        3. Merge Intervals (Medium)

你: "爬取第一题的详细信息和题解"
Claude: [爬取题目和高赞题解]
        ✅ 已保存 LRU Cache 题目和 3 个高赞题解

[完成学习后]

你: "标记 146 LRU Cache 为已学习,笔记:哈希表+双向链表实现"
Claude: [更新学习记录和计划进度]
        ✅ 已标记为已学习
        📋 已更新学习计划
        📊 今日进度: 1/3

你: "生成学习统计"
Claude: [显示整体进度和分类统计]
        📊 总体统计:
        - 总题目: 150
        - 已学习: 46
        - 进度: 30.67%
        - 学习天数: 15

❓ 常见问题

Q: Claude Code 无法识别技能?

A: 请检查以下几点:

  1. 确认在项目根目录启动

    cd /path/to/CodeLearningAgent
    claude-code
  2. 检查技能文件是否存在

    ls -la .claude/skills/*/SKILL.md

    应该看到 4 个 SKILL.md 文件

  3. 重启 Claude Code 会话

    • 退出当前会话
    • 重新启动 Claude Code
  4. 检查技能文件格式

    • 确保每个 SKILL.md 都有正确的 YAML frontmatter
    • 确保 namedescription 字段存在

Q: 技能触发不准确?

A: 尝试以下方法:

  1. 使用更明确的触发词

    • ❌ "获取题目" (模糊)
    • ✅ "爬取 LeetCode 题目 two-sum" (明确)
  2. 包含关键信息

    • 平台名称:洛谷、LeetCode
    • 操作类型:爬取、列出、创建、查看
    • 具体对象:题目、题单、计划
  3. 查看技能描述

    • 每个技能的 SKILL.md 开头有详细的触发词列表
    • 参考这些触发词来构造你的请求

Q: 如何创建学习计划?

A: 两步流程:

  1. 先爬取题目列表

    "获取 Top Interview 150 学习计划"
    
  2. 创建计划

    "创建 30 天学习计划,使用 Top Interview 150"
    

Claude 会自动:

  • 读取题目列表
  • 计算每日题目数
  • 智能分配题目
  • 创建计划文件

Q: 学习计划如何跟踪进度?

A: 自动跟踪机制:

当你说:

"标记 1 Two Sum 为已学习"

系统会自动:

  1. 更新 learning_record.json
  2. 更新所有相关学习计划的进度
  3. 重新计算完成率和进度状态

你可以随时查看:

"查看学习进度"

Q: 可以同时有多个学习计划吗?

A: 可以!你可以同时维护多个计划:

"列出所有学习计划"

示例:

  • plan_001: Interview Prep - 30 Days
  • plan_002: Google Interview Prep
  • plan_003: DP Mastery

每个计划独立跟踪进度,互不干扰。

Q: 如何修改或删除学习计划?

A: 使用以下命令:

查看计划:

"查看学习计划 plan_001"

导出计划:

"导出学习计划 plan_001 到 Markdown"

删除计划:

"删除学习计划 plan_001"

Q: 技能加载慢或超时?

A: 可能原因和解决方法:

  1. 网络问题

    • 检查网络连接
    • 尝试使用中国站(LeetCode)
  2. 请求频率限制

    • 增加请求间隔
    • 编辑 config.py 中的 REQUEST_DELAY
  3. Cookie 过期

    • 重新获取 Cookie
    • 更新配置文件

🎓 最佳实践

日常学习流程

早上(5分钟):

"查看今天的学习任务"

学习时(1-2小时):

  • 完成题目
  • 查看题解
  • 理解思路

学习后(2分钟):

"标记 [题号] 为已学习,笔记:[学习心得]"

晚上(2分钟):

"查看学习进度"

周期性复习

每周日:

"生成学习统计"
"分析我的薄弱环节"

根据统计结果:

  • 查看薄弱的分类和标签
  • 针对性复习相关题目
  • 调整学习计划

面试冲刺

准备期(第1周):

"获取 Top Interview 150"
"创建 30 天学习计划"
"导出计划到 Markdown"

执行期(第2-4周):

  • 每日完成任务
  • 保持学习节奏
  • 及时标记进度

复习期(第4周):

"查看学习统计"
"列出高频题目"
"重点复习薄弱环节"

📁 项目结构

CodeLearningAgent/
├── .claude/                    # Claude Code 配置
│   └── skills/                 # 技能定义
│       ├── luogu-scraper/      # 洛谷爬虫技能
│       │   └── SKILL.md
│       ├── leetcode-scraper/   # LeetCode爬虫技能
│       │   └── SKILL.md
│       ├── learning-stats/     # 学习统计技能
│       │   └── SKILL.md
│       └── learning-plans/     # 学习计划技能(新)
│           ├── SKILL.md
│           └── assets/
│               └── plan_template.md
│
├── luogu_scraper/              # 洛谷爬虫模块
│   ├── main.py
│   ├── config.py
│   ├── training_scraper.py
│   ├── problem_scraper.py
│   ├── solution_scraper.py
│   └── utils.py
│
├── leetcode_scraper/           # LeetCode爬虫模块
│   ├── main.py
│   ├── config.py
│   ├── problem_scraper.py
│   ├── solution_scraper.py
│   ├── list_scraper.py         # 新增:列表爬取
│   └── utils.py
│
├── stats/                      # 学习统计模块
│   ├── generate_stats.py      # 统计生成
│   ├── mark_learned.py         # 标记已学习
│   ├── create_plan.py          # 新增:创建计划
│   ├── view_plan.py            # 新增:查看计划
│   ├── plan_manager.py         # 新增:计划管理
│   ├── scheduler.py            # 新增:智能调度
│   └── data/
│       ├── learning_record.json
│       ├── learning_plan.json  # 新增:计划数据
│       └── stats.json
│
├── CLAUDE.md                   # 详细文档(给 Claude 看的)
└── README.md                   # 本文件(给人看的)

⚙️ 配置说明

洛谷爬虫配置

编辑 luogu_scraper/config.py:

# Cookie(必需)
COOKIE = '_uid=xxx; __client_id=xxx; ...'

# 请求间隔(秒)
REQUEST_DELAY = 1.5

# 每题获取的题解数量
MAX_SOLUTIONS_PER_PROBLEM = 3

LeetCode 爬虫配置

编辑 leetcode_scraper/config.py:

# 请求间隔(秒)
REQUEST_DELAY = 1.0

# 每题获取的题解数量
MAX_SOLUTIONS_PER_PROBLEM = 3

# 使用中国站
USE_CN_SITE = False

# Cookie(可选,访问会员题目需要)
COOKIE = ''

学习记录格式

创建 stats/data/learning_record.json:

{
  "learned_problems": {
    "1": {
      "learned_at": "2026-01-30",
      "notes": "Two Sum - 哈希表解法"
    },
    "146": {
      "learned_at": "2026-01-30",
      "notes": "LRU Cache - 哈希表+双向链表"
    }
  },
  "daily_learning": {
    "2026-01-30": ["1", "146"]
  }
}

🎯 新功能:智能学习计划

调度算法

评分权重:

  • 频率分数 (40%): 基于题目点赞数
  • 难度分数 (30%): 优先简单题目
  • 主题多样性 (30%): 确保主题分布均匀

分配策略:

  1. 过滤已学习题目
  2. 计算综合评分
  3. 按评分排序(高频、简单题优先)
  4. 跨日期分配,保持主题均衡
  5. 避免连续相同标签的题目

支持的题目来源

  1. 官方学习计划: Top Interview 150, LeetCode 75, SQL 50 等
  2. 公司题库: Google, Amazon, Microsoft, Facebook, Apple 等
  3. 主题集合: 动态规划、树、图、数组、字符串等
  4. 难度分类: Easy, Medium, Hard
  5. 高频题目: 按点赞数排序

📊 输出格式

题目输出

output/problems/0146_lru-cache/
├── problem.json      # 题目 JSON 数据
├── problem.md        # 题目 Markdown 格式
├── solutions.json    # 题解 JSON 数据
├── solution_1.md     # 第1名题解
├── solution_2.md     # 第2名题解
└── solution_3.md     # 第3名题解

学习统计输出

{
  "generated_at": "2026-01-30T14:00:00",
  "summary": {
    "total_problems": 150,
    "learned_problems": 45,
    "learning_progress": 30.0,
    "study_days": 15
  },
  "learning_plans": {
    "active_plans": 2,
    "total_problems_in_plans": 300,
    "completed_in_plans": 45
  }
}

🔧 命令行使用(可选)

如果你更喜欢命令行,所有功能都支持直接调用。详见 CLAUDE.md

快速示例

# LeetCode 爬虫
cd leetcode_scraper
python3 main.py --list --difficulty medium
python3 main.py --scrape-list study-plan:top-interview-150

# 学习计划
cd stats
python3 create_plan.py --name "Interview Prep" --source study-plan:top-interview-150 --start 2026-02-01 --end 2026-03-02
python3 view_plan.py --plan plan_001 --today
python3 mark_learned.py 1 "Two Sum - Hash table"

🚨 注意事项

  1. 遵守网站规则: 合理控制请求频率,避免对服务器造成压力
  2. Cookie 有效期: Cookie 可能过期,定期更新
  3. 数据用途: 仅供个人学习使用,请勿商业用途
  4. 学习记录: 及时更新学习记录以跟踪进度
  5. 备份数据: 定期备份 stats/data/ 目录

📝 更新日志

v2.0.0 (2026-01-30) - Claude Code 集成版

新增:

  • ✨ 深度集成 Claude Code,支持自然语言交互
  • ✨ 4 个专业技能:luogu-scraper, leetcode-scraper, learning-stats, learning-plans
  • ✨ 智能学习计划系统
  • ✨ LeetCode 题目列表爬取(学习计划、公司、主题)
  • ✨ 智能调度算法(频率+难度+主题多维度)
  • ✨ 自动进度跟踪
  • ✨ Markdown 导出功能

改进:

  • 🔧 重构技能结构,符合 Claude Code 规范
  • 🔧 优化 frontmatter 描述,提升触发准确性
  • 🔧 删除冗余内容,减少上下文占用
  • 📚 完善文档,面向 Claude Code 用户

v1.0.0 (2024-01-28) - 初始版本

  • 基础爬虫功能
  • 学习统计功能

📄 许可证

本项目仅供学习交流使用。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📮 联系方式

如有问题或建议,联系cjh18671720497@outlook.com


Made with ❤️ for algorithm learners, powered by Claude Code

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors