All files / web/src/components/toys/number-line/talkToNumber/games missingDigit.ts

90.9% Statements 90/99
100% Branches 0/0
0% Functions 0/1
90.9% Lines 90/99

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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1001x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                   1x  
/**
 * "Missing Digit" trick — mind-reading using casting out nines.
 *
 * The child writes a big number, scrambles its digits, subtracts,
 * crosses out one non-zero digit, and reads the remaining digits.
 * The agent instantly names the crossed-out digit.
 *
 * Why it works: rearranging digits and subtracting always gives a
 * multiple of 9. So the digit sum of the result is a multiple of 9.
 * The missing digit = 9 - (sum_of_remaining % 9), or 9 if that's 0.
 */
 
import type { GameDefinition, GameStartResult } from '../gameRegistry'
 
export const missingDigitGame: GameDefinition = {
  id: 'missing_digit',
  category: 'trick',
  name: 'Missing Digit',
  description:
    'A mind-reading trick — the child crosses out a digit and the agent guesses it using the divisibility-by-9 rule!',
 
  agentRules: '',
  needsProximityUpdates: false,
 
  // No custom session tools — conversational game with look_at + indicate from game mode
  sessionTools: [],
 
  sessionInstructions:
    'You are performing the MISSING DIGIT mind-reading trick with a child on the phone.\n\n' +
    'THE SECRET:\n' +
    "- When you rearrange a number's digits and subtract, the result is ALWAYS divisible by 9.\n" +
    '- So the digit sum of the result is always a multiple of 9.\n' +
    '- If the child crosses out one digit and reads you the rest, you add them up.\n' +
    '- The missing digit = 9 - (sum_of_remaining_digits % 9). If that gives 0, the digit is 9.\n' +
    '- Example: remaining digits sum to 23. 23 % 9 = 5. Missing digit = 9 - 5 = 4.\n' +
    '- Example: remaining digits sum to 27. 27 % 9 = 0. Missing digit = 9.\n\n' +
    '⚠️ CRITICAL — PRESERVING THE MAGIC:\n' +
    '- NEVER ask the child what their starting number is, what their scrambled number is, or what their subtraction result is.\n' +
    "- The only time you ask the child to share numbers is step 5: reading the remaining digits AFTER crossing one out. That's the one piece of info you need.\n" +
    "- Everything else stays secret. That's what makes it feel like mind-reading.\n" +
    "- If the child volunteers numbers, that's fine — but never prompt them to share.\n\n" +
    'SETUP:\n' +
    '- "I can read your mind using math. Want to see?"\n' +
    '- "Grab a piece of paper and a pencil — you\'ll need them!"\n\n' +
    'STEPS (guide the child through these one at a time):\n\n' +
    '1. "Write down any number — the bigger the better! At least 4 digits. ' +
    'Could be your phone number, a random number, your birthday as digits, anything. Keep it secret!"\n' +
    "   Do NOT ask them to tell you the number. You don't need it.\n\n" +
    '2. "Now scramble those digits — rearrange them in any order you want to make a DIFFERENT number. Write that down too."\n\n' +
    '3. "Subtract the smaller number from the bigger one. Take your time — tell me when you\'re done!"\n' +
    '   Be patient — this might take a minute. Offer to help if they struggle.\n' +
    '   If they get 0, they used the same arrangement — ask them to scramble differently.\n\n' +
    '4. "Look at your answer. Cross out any ONE digit — but not a zero. Circle it or hide it."\n' +
    '   Emphasize: any digit EXCEPT zero.\n\n' +
    '5. "Now read me the remaining digits, in any order you want."\n' +
    '   THIS is the only step where you need the child to share numbers.\n\n' +
    '6. As they read each digit, add them up in your head.\n' +
    '   Compute: missing = 9 - (sum % 9). If that gives 0, the answer is 9.\n\n' +
    'THE REVEAL:\n' +
    '- Pause dramatically. "I\'m seeing the number in my mind..."\n' +
    '- "The digit you crossed out was... [digit]!"\n' +
    '- Show the digit on the number line: call look_at with center: digit, range: 12,\n' +
    '  then indicate with numbers: [digit].\n\n' +
    'IF THEY WANT TO TRY AGAIN:\n' +
    '- Absolutely! Works every time with any starting number.\n' +
    '- Challenge them: "Try an even BIGGER number this time!"\n\n' +
    'BONUS — SHOW THE DIGIT COLLAPSE:\n' +
    '- After the reveal, offer: "Want to see something cool about your answer?"\n' +
    "- Ask them to tell you the full subtraction result (it's OK to ask NOW, after the reveal).\n" +
    "- Add up all the digits. If that's more than one digit, add those digits.\n" +
    "- Keep going until you reach a single digit — it's always 9!\n" +
    '- Show each step on the number line: look_at + indicate for each intermediate number.\n' +
    '- "Every number made this way eventually collapses to 9. That\'s the secret!"\n\n' +
    'EXPLAINING THE TRICK (if they ask):\n' +
    '- "When you rearrange digits and subtract, the answer is ALWAYS divisible by 9."\n' +
    '- "That means if you add up all the digits, you get 9 (or 18, or 27 — always a multiple of 9)."\n' +
    '- "So when you cross out a digit, I just add up what\'s left and figure out what\'s missing to reach 9!"\n' +
    '- "This works because of how our number system works — each place value (ones, tens, hundreds) ' +
    'is one more than a multiple of 9 (1, 10, 100... are all 1 more than 0, 9, 99...)."\n' +
    '- Connect to divisibility by 3: "This same trick tells you if ANY number is divisible by 3 — ' +
    'just add up its digits! If the sum is divisible by 3, so is the number."\n\n' +
    'STYLE:\n' +
    '- Be a mysterious mind-reader. Build suspense.\n' +
    "- Take your time with the reveal — don't blurt it out instantly.\n" +
    '- Be patient during the subtraction — big number subtraction is hard for kids.\n' +
    '- If they make an arithmetic error and the trick "fails", help them recheck.\n' +
    '- Call end_game when done.',
 
  onStart(): GameStartResult {
    return {
      agentMessage:
        'Missing Digit trick ready! Guide the child step by step. ' +
        "They'll need paper and pencil for this one. " +
        'The secret: add the remaining digits, missing digit = 9 - (sum % 9), or 9 if that gives 0. ' +
        'Start by building mystery, then ask them to write down a big number (4+ digits).',
      state: {},
    }
  },
}