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

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

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                                                                                                                                                           
/**
 * Fast Learner Profile (Hill Function Model)
 *
 * A student who quickly acquires mastery:
 * - Low K value (reaches 50% mastery with fewer exposures)
 * - Low hill coefficient (smooth learning curve, quick initial gains)
 * - Most skills learned normally, but MISSED the ten complements lesson
 * - Rarely needs help
 *
 * REALISTIC SCENARIO: Student was sick the day ten complements were taught.
 * They're good at basics and five complements, but struggle with ten complements.
 *
 * With K=8, n=1.5:
 * - 20 exposures → P ≈ 86% (strong skills)
 * - 0 exposures → P = 0% (missed skills - will fail until practiced)
 */

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

/**
 * Fast learner who missed ten complements lesson.
 * Strong in basics and five complements, weak in ten complements.
 */
const initialExposures: Record<string, number> = {
  // Basic skills - learned normally (20 exposures → ~86%)
  'basic.directAddition': 20,
  'basic.heavenBead': 18,
  'basic.simpleCombinations': 16,
  'basic.directSubtraction': 18,
  'basic.heavenBeadSubtraction': 16,
  'basic.simpleCombinationsSub': 14,
  // Five complements - learned normally (15 exposures → ~77%)
  'fiveComplements.4=5-1': 15,
  'fiveComplements.3=5-2': 14,
  'fiveComplements.2=5-3': 13,
  'fiveComplements.1=5-4': 12,
  // Ten complements - MISSED THIS LESSON (0 exposures → 0%)
  'tenComplements.9=10-1': 0,
  'tenComplements.8=10-2': 0,
  'tenComplements.7=10-3': 0,
  'tenComplements.6=10-4': 0,
  'tenComplements.5=10-5': 0,
}

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

export const fastLearnerProfile: StudentProfile = {
  name: 'Fast Learner (Missed Ten Complements)',
  description: 'Strong in basics, missed ten complements lesson, learns quickly',

  // K = 8: Reaches 50% proficiency at 8 exposures (fast)
  halfMaxExposure: 8,

  // n = 1.5: Smooth curve, quick initial gains
  hillCoefficient: 1.5,

  initialExposures,

  // Rarely needs help: 70% no help, 30% uses help
  helpUsageProbabilities: [0.7, 0.3],

  // Help bonus: 12% additive when help is used
  helpBonuses: [0, 0.12],

  // Relatively fast responses
  baseResponseTimeMs: 4000,

  // Low variance (consistent)
  responseTimeVariance: 0.25,
}