fix: 输入校验忽略多个连续空格与大小写;统一中英文引号与空白规范化

This commit is contained in:
shenlei
2026-09-16 17:55:08 +09:00
parent b454e1856c
commit f87849eb52
9 changed files with 162 additions and 27 deletions
+22 -3
View File
@@ -155,12 +155,31 @@ AssessmentPack? replacementFor(String packId) => switch (packId) {
/// Local checks for the frozen A0 exit tasks. They accept variable names and
/// places, but require the communicative information named by each task.
bool checkOpenAssessmentAnswer(AssessmentTask task, String input) {
final text = input.toLowerCase().replaceAll('', "'");
final text = input
.toLowerCase()
.replaceAll('', "'")
.replaceAll('', "'")
.replaceAll(RegExp(r"\s+"), " ")
.trim();
final words = RegExp(
r"[a-z]+(?:'[a-z]+)?",
).allMatches(text).map((match) => match.group(0)!).toSet();
bool has(String word) => words.contains(word);
bool phrase(String value) => text.contains(value);
bool has(String word) => words.contains(
word
.toLowerCase()
.replaceAll('', "'")
.replaceAll('', "'")
.trim(),
);
bool phrase(String value) {
final normVal = value
.toLowerCase()
.replaceAll('', "'")
.replaceAll('', "'")
.replaceAll(RegExp(r"\s+"), " ")
.trim();
return text.contains(normVal);
}
bool hasAny(Iterable<String> values) => values.any(has);
final introduction = phrase("i'm") || phrase('i am') || phrase('my name is');
final itIs = phrase("it's") || phrase('it is');