add-puzzle-type
关于
This skill scaffolds a new puzzle type across all 10+ integration points in the jigsawR package. It creates the core module, wires it into the unified pipeline (generation, rendering, etc.), and updates all related components including DESCRIPTION, config.yml, the Shiny app, and tests. Use it when adding a completely new puzzle type to ensure comprehensive, end-to-end integration.
快速安装
Claude Code
推荐npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/add-puzzle-type在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
增謎類
於 jigsawR 全管道諸接點建新謎類之架。
用時
- 包中增全新之謎類乃用
- 遵既立之整合檢單(CLAUDE.md 十點管道)乃用
- 新類首尾接線無遺乃用
入
- 必要:新類之名(小寫,如
"triangular") - 必要:幾何之述(片之形與排)
- 必要:類需外包乎(入 Suggests)
- 可選:標參(grid, size, seed, tabsize, offset)外之參
- 可選:參照實現或算法源
法
第一步:建核心謎模
建 R/<type>_puzzle.R,含內部生成函:
#' Generate <type> puzzle pieces (internal)
#' @noRd
generate_<type>_pieces_internal <- function(params, seed) {
# 1. Initialize RNG state
# 2. Generate piece geometries
# 3. Build edge paths (SVG path data)
# 4. Compute adjacency
# 5. Return list: pieces, edges, adjacency, metadata
}
循 R/voronoi_puzzle.R 或 R/snic_puzzle.R 之結構。
得: 函返一列,含 $pieces、$edges、$adjacency、$metadata。
敗則: 以 generate_voronoi_pieces_internal() 之返式對之,識缺列或誤型。
第二步:接 jigsawR_clean.R
編 R/jigsawR_clean.R:
- 添
"<type>"於valid_types量 - 於參段添類特參提取
- 添類特約束之驗
- 添檔前綴(如
"<type>"→"<type>_")
# In valid_types
valid_types <- c("rectangular", "hexagonal", "concentric", "voronoi", "snic", "<type>")
得: generate_puzzle(type = "<type>") 受而無「未知類」之訛。
敗則: 驗類名入 valid_types 拼寫無誤,參提取涵所需之類特參。
第三步:接 unified_piece_generation.R
編 R/unified_piece_generation.R:
- 於
generate_pieces_internal()添分派例 - 類支 PILES 記法則添融合處理
# In the switch/dispatch
"<type>" = generate_<type>_pieces_internal(params, seed)
得: 類分派時片得生。
敗則: 驗分派例之串與類名全同,generate_<type>_pieces_internal 已定且自謎模導出。
第四步:接 piece_positioning.R
編 R/piece_positioning.R:
添新類之定位分派。多類共用位法,然某類需定制。
得: apply_piece_positioning() 處新類無訛,片置於正位。
敗則: 察新類需定制位法乎,或可用共位。默路不適則添分派例。
第五步:接 unified_renderer.R
編 R/unified_renderer.R:
- 於
render_puzzle_svg()添渲例 - 添邊路函:
get_<type>_edge_paths() - 添片名函:
get_<type>_piece_name()
得: SVG 出現新類,片廓與邊路正。
敗則: 驗 get_<type>_edge_paths() 返有效 SVG 路,get_<type>_piece_name() 生各片之獨識。
第六步:接 adjacency_api.R
編 R/adjacency_api.R:
添鄰之分派,使 get_neighbors() 與 get_adjacency() 行於新類。
得: get_neighbors(result, piece_id) 返正確之鄰。
敗則: 驗鄰分派返正數結。以小格試,手驗鄰關於幾何。
第七步:添 ggpuzzle geom 層
編 R/geom_puzzle.R:
以 make_puzzle_layer() 工建 geom_puzzle_<type>():
#' @export
geom_puzzle_<type> <- function(mapping = NULL, data = NULL, ...) {
make_puzzle_layer(type = "<type>", mapping = mapping, data = data, ...)
}
得: ggplot() + geom_puzzle_<type>(aes(...)) 渲而不訛。
敗則: 驗 make_puzzle_layer() 受正類串,geom 函經 @export 於 NAMESPACE 導出。
第八步:添 Stat 分派
編 R/stat_puzzle.R:
- 添類特默參
- 於
compute_panel()添分派例
得: stat 層算謎幾何正,生預期之多邊。
敗則: 驗 compute_panel() 分派例返所需列(x、y、group、piece_id)之數框,默參合理。
第九步:更 DESCRIPTION
編 DESCRIPTION:
- 添新類於 Description 段之文
- 添新包於
Suggests:(若有外依) - 更
Collate:納新 R 檔(按字序)
得: devtools::document() 成。無未列檔之 NOTE。
敗則: 驗新 R 檔按字序入 Collate:,新 Suggests 包名與版約無誤。
第十步:更 config.yml
編 inst/config.yml:
添新類之默與約:
<type>:
grid:
default: [3, 3]
min: [2, 2]
max: [20, 20]
size:
default: [300, 300]
min: [100, 100]
max: [2000, 2000]
tabsize:
default: 20
min: 5
max: 50
# Add type-specific params here
得: 設為有效 YAML。默生可行之謎。
敗則: 以 yaml::yaml.load_file("inst/config.yml") 驗 YAML。確默格與默徑生合宜之謎。
第十一步:擴 Shiny 應用
編 inst/shiny-app/app.R:
- 添新類於 UI 類選
- 添條件 UI 面板於類特參
- 添服端生成邏輯
得: Shiny 應用下拉見新類,擇之則生謎。
敗則: 驗類入 UI 選之 choices,類特參條件面板用 conditionalPanel(condition = "input.type == '<type>'"),服端傳正參。
第十二步:建試套
建 tests/testthat/test-<type>-puzzles.R:
test_that("<type> puzzle generates correct piece count", { ... })
test_that("<type> puzzle respects seed reproducibility", { ... })
test_that("<type> adjacency returns valid neighbors", { ... })
test_that("<type> fusion merges pieces correctly", { ... })
test_that("<type> geom layer renders without error", { ... })
test_that("<type> SVG output is well-formed", { ... })
test_that("<type> config constraints are enforced", { ... })
類需外包則裹試以 skip_if_not_installed()。
得: 諸試皆過。無跳除非外依缺。
敗則: 各接點逐察。最常者分派例闕——行 grep -rn "switch\|valid_types" R/ 察所有分派處。
驗
-
generate_puzzle(type = "<type>")生有效之出 - 十接點皆正接
-
devtools::test()過新試 -
devtools::check()返 0 訛、0 警 - Shiny 應用渲新類
- 設之約強制(min/max 驗)
- 鄰與融合正行
- ggpuzzle geom 層渲無訛
-
devtools::document()成(NAMESPACE 更)
陷
- 分派例闕:遺一檔致默敗或「未知類」訛
- strsplit 遇負數:以
paste(a, b, sep = "-")建鄰鍵,負片標生如"1--1"之鍵。改用"|"分,以"\\|"析 - 用
cat()出文:必用cli包之日誌裹(log_info、log_warn等) - Collate 之序:DESCRIPTION Collate 必按字序或依賴序
- Config.yml 之式:確 YAML 有效;以
yaml::yaml.load_file("inst/config.yml")試
參
generate-puzzle— 架立後試新類run-puzzle-tests— 行全試套驗整合validate-piles-notation— 試新類之融合write-testthat-tests— 通用試之式write-roxygen-docs— 書新 geom 函之文
GitHub 仓库
相关推荐技能
content-collections
元Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。
polymarket
元这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。
creating-opencode-plugins
元该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。
sglang
元SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。
