diff --git a/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue b/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue index e0a54c6..a0dfaca 100644 --- a/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue +++ b/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue @@ -719,7 +719,7 @@ export default { } return Array.from(answers); }, - expandAnswerVariants(answer) { + expandSingleAnswerVariants(answer) { const base = String(answer || '').trim(); if (!base) return []; @@ -760,6 +760,24 @@ export default { return [...new Set([base, ...variants])]; }, + expandAnswerVariants(answer) { + const base = String(answer || '').trim(); + if (!base) return []; + + // Handle full-answer alternatives like "A / B" as separate valid answers. + // Word-level slash expansion alone does not cover this reliably. + const phraseAlternatives = base + .split(/\s+\/\s+/) + .map((part) => String(part || '').trim()) + .filter(Boolean); + + if (phraseAlternatives.length >= 2) { + const expanded = phraseAlternatives.flatMap((part) => this.expandSingleAnswerVariants(part)); + return [...new Set(expanded)]; + } + + return this.expandSingleAnswerVariants(base); + }, computeWeight(item) { const st = this.perId[item.id] || { c: 0, w: 0, streak: 0, lastAsked: 0 }; let w = 1;