协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
validate-piles-notation【开发与工程】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 Ue…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
PILES-Notationszeichenketten fuer Puzzle-Teilefusionsgruppen parsen und validieren.
generate_puzzle() validieren"1-2-3,4-5")"center", "ring1", "R1")library(jigsawR)
result <- validate_piles_syntax("1-2-3,4-5")
# Returns TRUE if valid, error message if invalid
Auf haeufige Syntaxfehler pruefen:
"1-2(-3)-4" mit nicht zusammenpassenden ()-, ,, :, (, ) und Schluesselwoerter erlaubt"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.
groups <- parse_piles("1-2-3,4-5")
# Returns: list(c(1, 2, 3), c(4, 5))
Fuer Zeichenketten mit Bereichen:
groups <- parse_piles("1:6,7-8")
# Returns: 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.
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.
Wenn ein Puzzle-Ergebnisobjekt verfuegbar ist, verifizieren:
# Generate the puzzle first
puzzle <- generate_puzzle(type = "hexagonal", grid = c(3), size = c(200))
# Parse with puzzle context (resolves keywords)
groups <- parse_fusion("center,ring1", puzzle)
Pruefen:
Erwartet: Alle Teil-IDs gueltig. Benachbarte Teile fusionieren sauber.
Bei Fehler: Ungueltige Teil-IDs oder nicht benachbarte Paare auflisten.
Parse/Serialize-Treue verifizieren:
original <- "1-2-3,4-5"
groups <- parse_piles(original)
roundtrip <- to_piles(groups)
# roundtrip should equal original (or canonical equivalent)
groups2 <- parse_piles(roundtrip)
identical(groups, groups2) # Must be TRUE
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.
# 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
validate_piles_syntax() gibt TRUE fuer gueltige Zeichenketten zurueckparse_piles() gibt korrekte Gruppenlisten zurueck"center" benoetigen ein Puzzle-Ergebnisobjekt. Es an parse_fusion() uebergeben, nicht an parse_piles()."1:6" schliesst beide Endpunkte ein (1, 2, 3, 4, 5, 6).generate-puzzle — Puzzles mit Fusionsgruppen generierenadd-puzzle-type — neue Typen brauchen PILES/Fusions-Unterstuetzungrun-puzzle-tests — PILES-Parsing mit der vollstaendigen Suite testen