Spaces:
Running
Running
| { | |
| "arcs": [ | |
| { | |
| "arc_id": "antaria_fundamentals", | |
| "title": "Antaria Fundamentals", | |
| "theme": "space", | |
| "difficulty": "easy", | |
| "concept_ids": ["even_odd", "sequence", "collect_and_reach", "loops_path", "shortest_path"] | |
| }, | |
| { | |
| "arc_id": "vault_of_divisors", | |
| "title": "Vault of Divisors", | |
| "theme": "bank", | |
| "difficulty": "medium", | |
| "concept_ids": ["comparison", "even_odd", "prime_gate", "sequence", "dfs_backtrack"] | |
| }, | |
| { | |
| "arc_id": "crystal_algorithms", | |
| "title": "Crystal Algorithms", | |
| "theme": "jungle", | |
| "difficulty": "hard", | |
| "concept_ids": ["shortest_path", "dfs_backtrack", "palindrome_path", "prime_gate", "collect_and_reach"] | |
| } | |
| ], | |
| "concepts": { | |
| "even_odd": { | |
| "id": "even_odd", | |
| "track": "PF", | |
| "title": "Even & Odd Tiles", | |
| "learning_outcome": "Use parity (n % 2) to decide which floor tiles are safe.", | |
| "description": "Only step on tiles whose number is even. Odd tiles overload Cody's suit!", | |
| "maze_type": "imperfect", | |
| "min_dim": 6, | |
| "max_dim": 9, | |
| "force_npc": false, | |
| "force_item": false, | |
| "maze_rule": { "type": "parity", "pass_if": "even" }, | |
| "hint_template": "Add the row and column mentally β if the tile number is divisible by 2, it's safe." | |
| }, | |
| "prime_gate": { | |
| "id": "prime_gate", | |
| "track": "PF", | |
| "title": "Prime Gate", | |
| "learning_outcome": "Recognize prime numbers (only divisible by 1 and itself).", | |
| "description": "Vault doors show a number. Only prime-numbered doors open!", | |
| "maze_type": "imperfect", | |
| "min_dim": 7, | |
| "max_dim": 10, | |
| "force_npc": true, | |
| "force_item": false, | |
| "maze_rule": { "type": "prime_only" }, | |
| "hint_template": "Primes: 2, 3, 5, 7, 11β¦ Check each labeled tile before stepping." | |
| }, | |
| "comparison": { | |
| "id": "comparison", | |
| "track": "PF", | |
| "title": "Pick the Greater Path", | |
| "learning_outcome": "Compare two values and choose the larger (relational operators).", | |
| "description": "At a split, always take the path marked with the larger number.", | |
| "maze_type": "imperfect", | |
| "min_dim": 6, | |
| "max_dim": 8, | |
| "force_npc": false, | |
| "force_item": true, | |
| "maze_rule": { "type": "max_label_only" }, | |
| "hint_template": "When two numbered tiles branch off, step on the bigger number first." | |
| }, | |
| "palindrome_path": { | |
| "id": "palindrome_path", | |
| "track": "PF", | |
| "title": "Mirror Path (Palindrome)", | |
| "learning_outcome": "Understand palindromes β same read forward and backward.", | |
| "description": "The safe route uses palindrome numbers (like 121, 3, 7).", | |
| "maze_type": "perfect", | |
| "min_dim": 8, | |
| "max_dim": 11, | |
| "force_npc": true, | |
| "force_item": true, | |
| "maze_rule": { "type": "palindrome_only" }, | |
| "hint_template": "A palindrome reads the same both ways: 4, 11, 121 are palindromes; 12 is not." | |
| }, | |
| "sequence": { | |
| "id": "sequence", | |
| "track": "PF", | |
| "title": "Order Matters (Sequence)", | |
| "learning_outcome": "Execute steps in the correct order β algorithms are sequential.", | |
| "description": "Visit the expert FIRST, collect the key SECOND, then reach the exit.", | |
| "maze_type": "imperfect", | |
| "min_dim": 7, | |
| "max_dim": 10, | |
| "force_npc": true, | |
| "force_item": true, | |
| "maze_rule": { "type": "ordered_checkpoints" }, | |
| "hint_template": "Follow the mission checklist top to bottom β skipping a step locks the exit." | |
| }, | |
| "collect_and_reach": { | |
| "id": "collect_and_reach", | |
| "track": "DAA", | |
| "title": "Collect Before Exit", | |
| "learning_outcome": "Preconditions: you must gather data before the goal unlocks.", | |
| "description": "The exit stays locked until you pick up the required item.", | |
| "maze_type": "imperfect", | |
| "min_dim": 7, | |
| "max_dim": 10, | |
| "force_npc": false, | |
| "force_item": true, | |
| "maze_rule": { "type": "ordered_checkpoints" }, | |
| "hint_template": "Grab the item on the path before heading to the finish flag." | |
| }, | |
| "shortest_path": { | |
| "id": "shortest_path", | |
| "track": "DAA", | |
| "title": "Shortest Route (BFS idea)", | |
| "learning_outcome": "Among many paths, the fewest steps often wins β breadth-first thinking.", | |
| "description": "Multiple tunnels exist. Find the route with the fewest moves!", | |
| "maze_type": "imperfect", | |
| "min_dim": 8, | |
| "max_dim": 11, | |
| "force_npc": false, | |
| "force_item": true, | |
| "maze_rule": { "type": "none" }, | |
| "hint_template": "Trace dead ends on paper first β shorter paths avoid unnecessary turns." | |
| }, | |
| "dfs_backtrack": { | |
| "id": "dfs_backtrack", | |
| "track": "DAA", | |
| "title": "Explore & Backtrack (DFS)", | |
| "learning_outcome": "When stuck, return to the last junction and try another branch.", | |
| "description": "Huge maze with dead ends. Explore systematically; backtrack when blocked.", | |
| "maze_type": "perfect", | |
| "min_dim": 10, | |
| "max_dim": 14, | |
| "force_npc": true, | |
| "force_item": true, | |
| "maze_rule": { "type": "none" }, | |
| "hint_template": "Hit a dead end? Reverse to the last fork and choose a new direction." | |
| }, | |
| "loops_path": { | |
| "id": "loops_path", | |
| "track": "PF", | |
| "title": "Repeat Moves (Loops)", | |
| "learning_outcome": "Use repeat/loop blocks instead of stacking identical moves.", | |
| "description": "A long straight corridor β use a loop block instead of many move blocks!", | |
| "maze_type": "perfect", | |
| "min_dim": 8, | |
| "max_dim": 12, | |
| "force_npc": false, | |
| "force_item": false, | |
| "maze_rule": { "type": "none" }, | |
| "hint_template": "Count how many steps in the corridor, then use Repeat Γ N with one move inside." | |
| } | |
| } | |
| } | |