feat: Puente Mayúscula-Minúscula + TTS SpeechSynthesis + E2E fixes
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
import type { Stage } from '../types'
|
||||
|
||||
const numeros2d = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30, 33, 40, 44, 50]
|
||||
|
||||
const exercises: any[] = []
|
||||
|
||||
for (const n of numeros2d) {
|
||||
const dec = Math.floor(n / 10)
|
||||
const uni = n % 10
|
||||
const decStr = '🔟'.repeat(dec)
|
||||
const uniStr = '●'.repeat(uni)
|
||||
|
||||
exercises.push({
|
||||
id: `num7-componer-${n}`,
|
||||
stage: 7,
|
||||
skillCode: 'valor-posicional',
|
||||
type: 'eleccion',
|
||||
prerequisites: n <= 15 ? ['num6-resta-visual-3-1'] : [`num7-componer-${numeros2d[numeros2d.indexOf(n) - 1]}`],
|
||||
content: {
|
||||
instruction: `${dec} decenas + ${uni} unidades = ?`,
|
||||
text: `${dec}×10 + ${uni}×1 = ?`,
|
||||
audioText: `${n}: ${dec} decenas y ${uni} unidades`,
|
||||
options: [
|
||||
...Array.from({ length: 4 }, (_, i) => n - 2 + i + (i >= 2 ? 2 : 0))
|
||||
.filter(j => j >= 10 && j <= 55 && j !== n)
|
||||
.slice(0, 2)
|
||||
.map(j => ({ label: String(j), correct: false, id: String(j) })),
|
||||
{ label: String(n), correct: true, id: String(n) },
|
||||
].sort(() => Math.random() - 0.5),
|
||||
emoji: decStr,
|
||||
},
|
||||
functionalContext: 'Componer números de 2 dígitos en decenas y unidades.',
|
||||
errorType: 'confusion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
// Write the number of tens and units
|
||||
for (const n of [15, 23, 30, 47, 50]) {
|
||||
const dec = Math.floor(n / 10)
|
||||
const uni = n % 10
|
||||
exercises.push({
|
||||
id: `num7-descomponer-${n}`,
|
||||
stage: 7,
|
||||
skillCode: 'valor-posicional',
|
||||
type: 'conciencia',
|
||||
prerequisites: [`num7-componer-${n}`],
|
||||
content: {
|
||||
instruction: `¿Cuántas decenas y unidades tiene ${n}?`,
|
||||
text: `${n} = ? decenas + ? unidades`,
|
||||
audioText: `${n} tiene ${dec} decenas y ${uni} unidades`,
|
||||
options: [
|
||||
{ label: `${dec} dec, ${uni} uni`, correct: true, id: `d${dec}u${uni}` },
|
||||
{ label: `${uni} dec, ${dec} uni`, correct: false, id: `d${uni}u${dec}` },
|
||||
{ label: `${dec + 1} dec, ${Math.max(0, uni - 1)} uni`, correct: false, id: `d${dec + 1}u${Math.max(0, uni - 1)}` },
|
||||
],
|
||||
emoji: '🔟',
|
||||
},
|
||||
functionalContext: 'Descomponer números en decenas y unidades.',
|
||||
errorType: 'inversion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
// Compare 2-digit numbers
|
||||
const comparaciones = [
|
||||
{ a: 15, b: 20 },
|
||||
{ a: 23, b: 18 },
|
||||
{ a: 30, b: 25 },
|
||||
{ a: 42, b: 39 },
|
||||
{ a: 50, b: 49 },
|
||||
]
|
||||
|
||||
for (const { a, b } of comparaciones) {
|
||||
const mayor = a > b ? a : b
|
||||
const menor = a < b ? a : b
|
||||
exercises.push({
|
||||
id: `num7-comparar-${a}-${b}`,
|
||||
stage: 7,
|
||||
skillCode: 'comparacion-2d',
|
||||
type: 'eleccion',
|
||||
prerequisites: [`num7-descomponer-${mayor}`],
|
||||
content: {
|
||||
instruction: `¿Cuál número es más grande?`,
|
||||
text: `${a} vs ${b}`,
|
||||
audioText: `¿Cuál es más grande?`,
|
||||
options: [
|
||||
{ label: String(a), correct: a === mayor, id: String(a) },
|
||||
{ label: String(b), correct: b === mayor, id: String(b) },
|
||||
],
|
||||
emoji: '📏',
|
||||
},
|
||||
functionalContext: 'Comparar números de 2 dígitos.',
|
||||
errorType: 'confusion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 7,
|
||||
name: 'Decenas y unidades',
|
||||
description: 'Componer y descomponer números de 2 dígitos en decenas y unidades. Comparar números.',
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
Reference in New Issue
Block a user