validate-piles-notation
About
This skill parses and validates PILES-Notation strings used to specify piece fusion groups in jigsawR. It performs syntax validation, converts notation into group lists, provides plain-text explanations, verifies adjacency against puzzle results, and ensures round-trip serialization fidelity. Use it to validate custom PILES strings before passing to `generate_puzzle()`, debug fusion group issues, explain the notation to users, or test parse/serialize consistency.
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 locale: de source_locale: en source_commit: 6f65f316 translator: claude translation_date: "2026-03-17" description: > PILES-Notation (Puzzle Input Line Entry System) fuer die Spezifikation von Teilefusionsgruppen in jigsawR parsen und validieren. Umfasst Syntaxvalidierung, Parsen in Gruppenlisten, Klartext-Erklaerung, Adjazenzverifikation gegen Puzzleergebnisse und Round-Trip-Serialisierung. Anwenden beim Validieren benutzerdefinierter PILES-Zeichenketten vor der Uebergabe an generate_puzzle(), beim Debuggen von Fusionsgruppen-Problemen, beim Erklaeren der Notation fuer Benutzer, oder beim Testen der Round-Trip-Parse/Serialize-Treue. 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
PILES-Notation validieren
PILES-Notationszeichenketten fuer Puzzle-Teilefusionsgruppen parsen und validieren.
Wann verwenden
- Benutzerdefinierte PILES-Zeichenketten vor der Uebergabe an
generate_puzzle()validieren - Fusionsgruppen-Probleme debuggen (falsche Teile zusammengefuegt, unerwartete Ergebnisse)
- PILES-Notation fuer Benutzer in Klartext erklaeren
- Round-Trip-Treue testen: Parsen -> Gruppen -> Serialisieren -> Parsen
Eingaben
- Erforderlich: PILES-Notationszeichenkette (z.B.
"1-2-3,4-5") - Optional: Puzzle-Ergebnisobjekt (fuer Adjazenzvalidierung und Schluesselwortaufloesung)
- Optional: Puzzletyp (fuer Schluesselwort-Unterstuetzung wie
"center","ring1","R1")
Vorgehensweise
Schritt 1: Syntaxvalidierung
library(jigsawR)
result <- validate_piles_syntax("1-2-3,4-5")
# Gibt TRUE zurueck wenn gueltig, Fehlermeldung wenn ungueltig
Auf haeufige Syntaxfehler pruefen:
- Ungepaarte Klammern:
"1-2(-3)-4"mit nicht zusammenpassenden() - Ungueltige Zeichen: nur Ziffern,
-,,,:,(,)und Schluesselwoerter erlaubt - Leere Gruppen:
"1-2,,3-4"(doppeltes Komma)
Erwartet: TRUE fuer gueltige Syntax, beschreibender Fehler fuer ungueltige.
Bei Fehler: Die genaue PILES-Zeichenkette und die Validierungsfehlermeldung ausgeben.
Schritt 2: In Gruppen parsen
groups <- parse_piles("1-2-3,4-5")
# Gibt zurueck: list(c(1, 2, 3), c(4, 5))
Fuer Zeichenketten mit Bereichen:
groups <- parse_piles("1:6,7-8")
# Gibt zurueck: list(c(1, 2, 3, 4, 5, 6), c(7, 8))
Erwartet: Liste von Integer-Vektoren, einer pro Fusionsgruppe, mit korrekten Teil-IDs und Gruppengrenzen.
Bei Fehler: Zuerst pruefen ob die PILES-Zeichenkette die Syntaxvalidierung in Schritt 1 bestanden hat. Wenn das Parsen unerwartete Gruppen zurueckgibt, ueberpruefen ob - Teile innerhalb einer Gruppe trennt und , Gruppen trennt, und dass die Bereichsnotation (:) zu inklusiven Endpunkten expandiert.
Schritt 3: In Klartext erklaeren
Jede Gruppe fuer den Benutzer beschreiben:
"1-2-3,4-5"-> "Gruppe 1: Teile 1, 2 und 3 fusionieren. Gruppe 2: Teile 4 und 5 fusionieren.""1:6"-> "Gruppe 1: Teile 1 bis 6 fusionieren (6 Teile).""center,ring1"-> "Gruppe 1: Mittelteil. Gruppe 2: alle Teile in Ring 1."
Erwartet: Jede Fusionsgruppe wird in Klartext beschrieben mit Teilezahlen und Bezeichnern, sodass die Notation fuer nicht-technische Benutzer verstaendlich wird.
Bei Fehler: Wenn Schluesselwoerter nicht erklaert werden koennen (z.B. hat "ring1" keine klare Bedeutung), braucht die Notation moeglicherweise ein Puzzle-Ergebnisobjekt fuer Kontext. Den Benutzer empfehlen den Puzzletyp anzugeben oder stattdessen numerische Teil-IDs zu verwenden.
Schritt 4: Gegen Puzzle-Ergebnis validieren (Optional)
Wenn ein Puzzle-Ergebnisobjekt verfuegbar ist, verifizieren:
# Zuerst das Puzzle generieren
puzzle <- generate_puzzle(type = "hexagonal", grid = c(3), size = c(200))
# Mit Puzzle-Kontext parsen (loest Schluesselwoerter auf)
groups <- parse_fusion("center,ring1", puzzle)
Pruefen:
- Alle Teil-IDs existieren im Puzzle
- Schluesselwoerter loesen zu gueltigen Teilemengen auf
- Fusionierte Teile sind tatsaechlich benachbart (Warnung wenn nicht)
Erwartet: Alle Teil-IDs gueltig. Benachbarte Teile fusionieren sauber.
Bei Fehler: Ungueltige Teil-IDs oder nicht benachbarte Paare auflisten.
Schritt 5: Round-Trip-Serialisierung
Parse/Serialize-Treue verifizieren:
original <- "1-2-3,4-5"
groups <- parse_piles(original)
roundtrip <- to_piles(groups)
# roundtrip sollte gleich original sein (oder kanonisch aequivalent)
groups2 <- parse_piles(roundtrip)
identical(groups, groups2) # Muss TRUE sein
Erwartet: Der Round-Trip erzeugt identische Gruppenlisten, was bestaetigt dass parse_piles() und to_piles() zueinander invers sind.
Bei Fehler: Wenn der Round-Trip abweicht, pruefen ob der Serialisierer die Notation normalisiert (z.B. Teil-IDs sortiert oder Bereiche in explizite Listen konvertiert). Kanonische Unterschiede sind akzeptabel solange identical(groups, groups2) TRUE zurueckgibt.
PILES-Kurzreferenz
# Grundsyntax
"1-2" # Teile 1 und 2 fusionieren
"1-2-3,4-5" # Zwei Gruppen: (1,2,3) und (4,5)
"1:6" # Bereich: Teile 1 bis 6
# Schluesselwoerter (benoetigen puzzle_result)
"center" # Mittelteil (hex/concentric)
"ring1" # Alle Teile in Ring 1
"R1" # Reihe 1 (rectangular)
"boundary" # Alle Randteile
# Funktionen
parse_piles("1-2-3,4-5") # PILES-Zeichenkette parsen
parse_fusion("1-2-3", puzzle) # Format automatisch erkennen
to_piles(list(c(1,2), c(3,4))) # In PILES konvertieren
validate_piles_syntax("1-2(-3)-4") # Syntax validieren
Validierung
-
validate_piles_syntax()gibt TRUE fuer gueltige Zeichenketten zurueck -
parse_piles()gibt korrekte Gruppenlisten zurueck - Round-Trip-Serialisierung bewahrt die Gruppen
- Schluesselwoerter loesen korrekt mit Puzzle-Kontext auf
- Ungueltige Syntax erzeugt klare Fehlermeldungen
Haeufige Stolperfallen
- Schluesselwort ohne Puzzle-Kontext: Schluesselwoerter wie
"center"benoetigen ein Puzzle-Ergebnisobjekt. Es anparse_fusion()uebergeben, nicht anparse_piles(). - 1-indizierte Teile: Teil-IDs beginnen bei 1, nicht bei 0.
- Benachbarte vs. nicht benachbarte Fusion: Nicht benachbarte Teile zu fusionieren funktioniert, kann aber unerwartete visuelle Ergebnisse erzeugen. Adjazenz validieren wenn moeglich.
- Bereichsnotation:
"1:6"schliesst beide Endpunkte ein (1, 2, 3, 4, 5, 6).
Verwandte Skills
generate-puzzle— Puzzles mit Fusionsgruppen generierenadd-puzzle-type— neue Typen brauchen PILES/Fusions-Unterstuetzungrun-puzzle-tests— PILES-Parsing mit der vollstaendigen Suite testen
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.
