All files / web/src/test/journey-simulator/profiles slow-learner.ts

0% Statements 0/83
0% Branches 0/1
0% Functions 0/1
0% Lines 0/83

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84                                                                                                                                                                       
/**
 * Slow Learner Profile (Hill Function Model)
 *
 * A student who needs more practice to acquire mastery:
 * - High K value (needs more exposures to reach 50%)
 * - Higher hill coefficient (delayed onset, then improvement)
 * - Most skills learned (with extra practice), but MISSED some ten-complement skills
 * - Uses help more often
 *
 * REALISTIC SCENARIO: Student missed class when ten-complements were introduced.
 * They know basic operations and five-complements, but several ten-complements
 * were never properly taught.
 *
 * With K=15, n=2.5 (reduced K for achievable mastery):
 * - 40 exposures → P ≈ 91% (strong skills - HIGH CONTRAST)
 * - 0 exposures → P = 0% (missed skills)
 *
 * KEY: K=15 instead of K=20 so strong skills can reach 90%+
 *
 * NOTE: We use ten-complement skills as the "weak" skills because the problem
 * generator exercises these during normal practice. Subtraction-specific skills
 * would require subtraction problems to be generated.
 */

import type { StudentProfile } from '../types'

/**
 * Slow learner who missed some ten-complement concepts.
 * Strong in basics and five-complements, weak in specific ten-complements.
 */
const initialExposures: Record<string, number> = {
  // Basic skills - well learned with extra practice (45 exposures → ~93%)
  'basic.directAddition': 45,
  'basic.heavenBead': 42,
  'basic.simpleCombinations': 40,
  'basic.directSubtraction': 40,
  'basic.heavenBeadSubtraction': 38,
  'basic.simpleCombinationsSub': 38,
  // Five complements - well learned (40 exposures → ~91%)
  'fiveComplements.4=5-1': 42,
  'fiveComplements.3=5-2': 40,
  'fiveComplements.2=5-3': 38,
  'fiveComplements.1=5-4': 38,
  // Ten complements - MIXED: some well learned, some MISSED (0 exposure)
  'tenComplements.9=10-1': 42,
  'tenComplements.8=10-2': 40,
  'tenComplements.7=10-3': 0, // MISSED
  'tenComplements.6=10-4': 0, // MISSED
  'tenComplements.5=10-5': 0, // MISSED
}

/** Skills this student is weak at (for test validation) */
export const SLOW_LEARNER_WEAK_SKILLS = [
  'tenComplements.7=10-3',
  'tenComplements.6=10-4',
  'tenComplements.5=10-5',
]

export const slowLearnerProfile: StudentProfile = {
  name: 'Slow Learner (Missed Ten-Complements)',
  description:
    'Strong in basics and five-complements, missed some ten-complement concepts, learns slowly',

  // K = 15: Reaches 50% proficiency at 15 exposures (slow but achievable)
  halfMaxExposure: 15,

  // n = 2.5: Delayed onset - slow start, then improvement kicks in
  hillCoefficient: 2.5,

  initialExposures,

  // Uses help often: 40% no help, 60% uses help
  helpUsageProbabilities: [0.4, 0.6],

  // Help bonus: 20% additive when help is used
  helpBonuses: [0, 0.2],

  // Takes longer to respond
  baseResponseTimeMs: 8000,

  // More variable (sometimes fast guesses, sometimes slow thinking)
  responseTimeVariance: 0.4,
}