validate-piles-notation
About
This skill validates and parses PILES notation strings used to specify puzzle piece fusion groups in jigsawR. It performs syntax validation, converts notation to group lists, provides plain explanations, and supports adjacency verification against puzzle results. Developers should use it to validate user input before `generate_puzzle()`, debug fusion group issues, explain notation to users, and test round-trip serialization fidelity.
Quick Install
Claude Code
Recommendednpx 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/validate-piles-notationCopy and paste this command in Claude Code to install this skill
Documentation
name: validate-piles-notation description: > jigsawRのピースフュージョングループを指定するためのPILES(Puzzle Input Line Entry System)記法を解析・検証する。構文検証、グループリストへの解析、 平易な説明、パズル結果に対する隣接検証、ラウンドトリップシリアライズを カバー。generate_puzzle()に渡す前のユーザー提供PILES文字列の検証、 フュージョングループの問題デバッグ、ユーザーへの記法説明、 ラウンドトリップ解析/シリアライズの忠実性テストに使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: jigsawr complexity: intermediate language: R tags: jigsawr, piles, notation, fusion, parsing, dsl locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
PILES記法の検証
パズルピースフュージョングループのためのPILES記法文字列を解析・検証する。
使用タイミング
generate_puzzle()に渡す前のユーザー提供PILES文字列の検証- フュージョングループの問題デバッグ(間違ったピースの結合、予期しない結果)
- ユーザーへのPILES記法の平易な説明
- ラウンドトリップの忠実性テスト: 解析 -> グループ -> シリアライズ -> 解析
入力
- 必須: PILES記法文字列(例:
"1-2-3,4-5") - 任意: パズル結果オブジェクト(隣接検証とキーワード解決用)
- 任意: パズルタイプ(
"center"、"ring1"、"R1"などのキーワードサポート用)
手順
ステップ1: 構文検証
library(jigsawR)
result <- validate_piles_syntax("1-2-3,4-5")
# 有効な場合はTRUEを返し、無効な場合はエラーメッセージを返す
一般的な構文エラーを確認する:
- 対応しない括弧:
"1-2(-3)-4"で()が不一致 - 無効な文字: 数字、
-、,、:、(、)とキーワードのみ許可 - 空のグループ:
"1-2,,3-4"(二重カンマ)
期待結果: 有効な構文の場合はTRUE、無効な場合は説明的なエラー。
失敗時: 正確なPILES文字列と検証エラーメッセージを出力する。
ステップ2: グループへの解析
groups <- parse_piles("1-2-3,4-5")
# 返却値: list(c(1, 2, 3), c(4, 5))
範囲を含む文字列の場合:
groups <- parse_piles("1:6,7-8")
# 返却値: list(c(1, 2, 3, 4, 5, 6), c(7, 8))
期待結果: 整数ベクトルのリスト(フュージョングループごとに1つ)。正しいピースIDとグループ境界を持つ。
失敗時: PILES文字列がステップ1で構文検証を通過しているか最初に確認する。解析が予期しないグループを返す場合、-がグループ内のピースを区切り、,がグループを区切ること、および範囲記法(:)が両端を含む形で展開されることを確認する。
ステップ3: 平易な言葉での説明
各グループをユーザーに説明する:
"1-2-3,4-5"-> 「グループ1: ピース1、2、3を融合。グループ2: ピース4と5を融合。」"1:6"-> 「グループ1: ピース1から6を融合(6ピース)。」"center,ring1"-> 「グループ1: 中心ピース。グループ2: リング1のすべてのピース。」
期待結果: 各フュージョングループがピース数と識別子とともに平易な言葉で説明され、非技術的なユーザーにも記法が理解可能になる。
失敗時: キーワードが説明できない場合(例: "ring1"が明確な意味を持たない)、記法にはコンテキストとしてパズル結果オブジェクトが必要な場合がある。ユーザーにパズルタイプを提供するか、代わりに数値ピースIDを使用するようアドバイスする。
ステップ4: パズル結果に対する検証(任意)
パズル結果オブジェクトが利用可能な場合、以下を確認する:
# まずパズルを生成
puzzle <- generate_puzzle(type = "hexagonal", grid = c(3), size = c(200))
# パズルコンテキストで解析(キーワードを解決)
groups <- parse_fusion("center,ring1", puzzle)
確認事項:
- すべてのピースIDがパズルに存在する
- キーワードが有効なピースセットに解決される
- 融合されるピースが実際に隣接している(隣接していない場合は警告)
期待結果: すべてのピースIDが有効。隣接するピースがクリーンに融合される。
失敗時: 無効なピースIDまたは非隣接ペアをリストする。
ステップ5: ラウンドトリップシリアライズ
解析/シリアライズの忠実性を検証する:
original <- "1-2-3,4-5"
groups <- parse_piles(original)
roundtrip <- to_piles(groups)
# roundtripはoriginalと等しい(または正規化された等価物)はず
groups2 <- parse_piles(roundtrip)
identical(groups, groups2) # TRUEでなければならない
期待結果: ラウンドトリップが同一のグループリストを生成し、parse_piles()とto_piles()が逆関数であることを確認する。
失敗時: ラウンドトリップが異なる場合、シリアライザが記法を正規化しているか確認する(例: ピースIDのソートや範囲を明示的リストへの変換)。identical(groups, groups2)がTRUEを返す限り、正規化の違いは許容される。
PILESクイックリファレンス
# 基本構文
"1-2" # ピース1と2を融合
"1-2-3,4-5" # 2つのグループ: (1,2,3)と(4,5)
"1:6" # 範囲: ピース1から6
# キーワード(puzzle_resultが必要)
"center" # 中心ピース(hex/concentric)
"ring1" # リング1のすべてのピース
"R1" # 行1(rectangular)
"boundary" # すべての境界ピース
# 関数
parse_piles("1-2-3,4-5") # PILES文字列を解析
parse_fusion("1-2-3", puzzle) # フォーマットを自動検出
to_piles(list(c(1,2), c(3,4))) # PILESに変換
validate_piles_syntax("1-2(-3)-4") # 構文を検証
バリデーション
-
validate_piles_syntax()が有効な文字列に対してTRUEを返す -
parse_piles()が正しいグループリストを返す - ラウンドトリップシリアライズがグループを保持する
- キーワードがパズルコンテキストで正しく解決される
- 無効な構文が明確なエラーメッセージを生成する
よくある落とし穴
- パズルコンテキストなしのキーワード:
"center"のようなキーワードにはパズル結果オブジェクトが必要。parse_piles()ではなくparse_fusion()に渡すこと。 - 1始まりのピース: ピースIDは0ではなく1から始まる。
- 隣接 vs 非隣接フュージョン: 非隣接ピースの融合は動作するが、予期しない視覚結果を生じる場合がある。可能な場合は隣接を検証する。
- 範囲記法:
"1:6"は両端を含む(1, 2, 3, 4, 5, 6)。
関連スキル
generate-puzzle— フュージョングループを使用してパズルを生成するadd-puzzle-type— 新しいタイプにはPILES/フュージョンサポートが必要run-puzzle-tests— フルスイートでPILES解析をテストする
GitHub Repository
Related Skills
content-collections
MetaThis skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.
polymarket
MetaThis skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.
creating-opencode-plugins
MetaThis skill helps developers create OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It provides the plugin structure, event API specifications, and implementation patterns for JavaScript/TypeScript modules. Use it when you need to intercept, monitor, or extend the OpenCode AI assistant's lifecycle with custom event-driven logic.
sglang
MetaSGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.
