Пришла мне в голову одна весьма интересная мысль.
Размышления были следующими: сделаешь зачёт ответов пожёстче - сразу будут жаловаться на незачёт падежных форм; сделаешь зачёт помягче - будут сетовать на то, что программа всякую ерунду принимает.
И вот какое придумалось улучшение:
необходимо уделять больше внимания совпадениям в начале слов, нежели в конце. Связано это с естественным строением русского языка: если два слова отличаются лишь ближе к концу, то,
скорее всего, это две формы одного и того же слова.
Только, разумеется, старый зачёт надо тоже сохранить в силе, т.е. при опечатке в первых буквах слова всё равно ответ должен засчитываться. Просто при приближении к концу слов образца (авторского ответа) зачёт становится либеральнее.
Поскольку количество слов в авторском ответе и ответе игрока в общем случае различается, то сравнивать по-прежнему нужно строки, а не слова. Однако изменения коснутся вот чего.
Раньше за каждый совпадающий символ общей подпоследовательности начислялось 1 очко. Число набранных очков и составляло длину этой подпоследовательности. Затем это число делилось на длину образца, и делался вывод о том, можно ли принимать.
Теперь за каждую совпавшую букву будет даваться разное число очков в зависимости от её позиции в авторском ответе. Возможны два подхода (на примере "Медного всадника"):
1.
Код:
Строка: М е д н ы й в с а д н и к
Очки за совпадение: 6 5 4 3 2 1 7 6 5 4 3 2 1
2.
Код:
Строка: М е д н ы й в с а д н и к
Очки за совпадение: 1 5/6 4/6 3/6 2/6 1/6 1 6/7 5/7 4/7 3/7 2/7 1/7
Все очки, полученные за совпадения, суммируются. Затем определяется максимально возможное число очков. После этого первое делится на второе и снова сравнивается с допустимой мерой совпадения. Как видите, совпадения в начале слов теперь играют бОльшую роль. Пробелы, как всегда, в сравнении не участвуют.
Какой из подходов лучше - насчёт этого надо подумать. Мне более симпатичен первый, ведь в нём уменьшается роль маленьких слов. например, во втором подходе за совпадения первых букв в словах "и" и "медный" даёт одинаковое число очков - 1, хотя первое слово вроде поценнее будет. Впрочем, надо ещё подумать: ведь первый подход при этом будет требовать и более точного совпадения с длинными словами.