feat(biochem): Фаза 5.3 — 3D-build challenge с проверкой структуры

biochemController.js: structuralMatch/canonicalHash (Morgan-подобный канонический
хеш графа) — для build-задания с data.requireStructure проверяется связность
против эталонной молекулы (molecule_id), а не только формула. Отличает изомеры:
этанол != диметиловый эфир при одной формуле C2H6O.

seed_biochem_challenges.js: +4 structure-build задания (CO2, этилен, этанол,
уксусная кислота). biochem.html: сообщение об ошибке wrong_structure.

Проверено на реальном коде против БД: этанол==этанол true, ==диметиловый эфир false.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 15:35:52 +03:00
parent d3c336566a
commit 84feca94d7
3 changed files with 73 additions and 0 deletions
+2
View File
@@ -1550,6 +1550,8 @@ async function submitChallenge() {
loadChallenges();
} catch(e) {
if (e.data?.error === 'wrong_formula') LS.toast(`Неверно. Ожидается ${e.data.expected}, получено ${e.data.submitted}`, 'error');
else if (e.data?.error === 'wrong_structure') LS.toast('Формула верна, но структура (связность) не та — проверь, как соединены атомы', 'error');
else if (e.data?.error === 'valency_error') LS.toast('Есть ошибки валентности', 'error');
else LS.toast('Ошибка: ' + e.message, 'error');
}
}