import { DIFFICULTY_PROFILES, makeHarder, makeEasier, findRegroupingIndex, findScaffoldingIndex, REGROUPING_PROGRESSION, SCAFFOLDING_PROGRESSION, } from "../src/app/create/worksheets/addition/difficultyProfiles"; // Start from beginner let state = { pAnyStart: DIFFICULTY_PROFILES.beginner.regrouping.pAnyStart, pAllStart: DIFFICULTY_PROFILES.beginner.regrouping.pAllStart, displayRules: DIFFICULTY_PROFILES.beginner.displayRules, }; console.log("=== MAKE HARDER PATH ===\n"); console.log("Format: (regroupingIdx, scaffoldingIdx) - description\n"); const harderPath: Array<{ r: number; s: number; desc: string }> = []; // Record starting point let rIdx = findRegroupingIndex(state.pAnyStart, state.pAllStart); let sIdx = findScaffoldingIndex(state.displayRules); harderPath.push({ r: rIdx, s: sIdx, desc: "START (beginner)" }); console.log(`(${rIdx}, ${sIdx}) - START (beginner)`); // Click "Make Harder" 30 times or until max for (let i = 0; i < 30; i++) { const result = makeHarder(state); const newR = findRegroupingIndex(result.pAnyStart, result.pAllStart); const newS = findScaffoldingIndex(result.displayRules); if (newR === rIdx && newS === sIdx) { console.log(`\n(${newR}, ${newS}) - ${result.changeDescription} (STOPPED)`); break; } rIdx = newR; sIdx = newS; state = result; harderPath.push({ r: rIdx, s: sIdx, desc: result.changeDescription }); console.log(`(${rIdx}, ${sIdx}) - ${result.changeDescription}`); } console.log("\n\n=== PATH VISUALIZATION ===\n"); console.log("Regrouping Index →"); console.log("Scaffolding ↓\n"); // Create 2D grid visualization const grid: string[][] = []; for (let s = 0; s <= 12; s++) { grid[s] = []; for (let r = 0; r <= 18; r++) { grid[s][r] = " ·"; } } // Mark path harderPath.forEach((point, idx) => { if (idx === 0) { grid[point.s][point.r] = " S"; // Start } else if (idx === harderPath.length - 1) { grid[point.s][point.r] = " E"; // End } else { grid[point.s][point.r] = `${idx.toString().padStart(3)}`; } }); // Mark presets const presets = [ { label: "BEG", profile: DIFFICULTY_PROFILES.beginner }, { label: "EAR", profile: DIFFICULTY_PROFILES.earlyLearner }, { label: "INT", profile: DIFFICULTY_PROFILES.intermediate }, { label: "ADV", profile: DIFFICULTY_PROFILES.advanced }, { label: "EXP", profile: DIFFICULTY_PROFILES.expert }, ]; presets.forEach((preset) => { const r = findRegroupingIndex( preset.profile.regrouping.pAnyStart, preset.profile.regrouping.pAllStart, ); const s = findScaffoldingIndex(preset.profile.displayRules); // Only mark if not already part of path const onPath = harderPath.some((p) => p.r === r && p.s === s); if (!onPath) { grid[s][r] = preset.label; } }); // Print grid (inverted so scaffolding increases upward) console.log( " 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18", ); for (let s = 12; s >= 0; s--) { console.log(`${s.toString().padStart(2)} ${grid[s].join("")}`); } console.log("\nLegend:"); console.log(" S = Start (beginner)"); console.log(" E = End (maximum)"); console.log(" 1-29 = Step number"); console.log(" BEG/EAR/INT/ADV/EXP = Preset profiles"); console.log(" · = Not visited");