
Решил я как то сделать тест: Какой ты жучара из Deep Rock Galactic. В игре 64 жучары, а значит и результатов в тесте должно быть 64. С тестами у которых вопросов больше чем результатов все понятно - пишешь как пойдет и все равно будет точный результат. Но я со своей толпой жучар где-то после 5 вопроса столкнулся с проблемой: А как вообще точно определить каким жуком является человек? Сколько вопросов мне нужно задать чтобы отделить 2 рандомных жука друг от друга? Типа представьте что я понапридумывал 100 вопросов и что если один из возможных путей выбора ответов наберет одинаковое количество баллов для двух похожих жуков?
Обычно эта проблема решается сама при помощи дополнительного вопроса в конце теста, который выбирает один вариант среди всех с одинаковым количеством баллов, но я считаю что это недоработка теста, потому что дополнительный вопрос должен появиться только если вы выбрали равное количество ответов ведущих к разным результатам. (например вы выбрали 5 ответов ведущих к варианту А и 5 ответов ведущих к варианту Б в тесте из 10 вопросов). И чтобы это решить я придумал 2 способа (99.9% случаев - второй вариант)
Этот способ можно использовать когда любым вопросом в тесте можно отмести ровно половину результатов. Это буквально определение одного бита информации, на этом основана кодировка всего на свете и похожим образом работает бинарный поиск и так же фокусники отгадывают какую карту ты вытянул из колоды за 7 вопросов: тебя спрашивают карта красная? и твой ответ сужает область поиска для фокусника с 36 до 18 (в 2 раза). Таким образом количество вопросов которые нужно задать = log2(r), где r - количество результатов в тесте.
Только в тестах все немного сложнее, в каждом вопросе может быть больше чем 2 варианта ответа, тогда формула будет logq(r),
где q - количество вариантов ответа в каждом вопросе.
В моем тесте 64 результата, это значит что если я буду задавать вопросы с 2 вариантами ответов мне потребуется log2(64) = 6 вопросов. Или используя вопросы по 4 варианта: log4(64) = 3 вопроса.
Плюсы:
1) Можно удивить невероятно маленьким соотношением количество вопросов / количество результатов.
Минусы:
1) Очень мало тестов обладают таким набором результатов, который можно несколько раз делить на 2 разные группы.
2) Если количество результатов не является степенью количества вариантов ответа, то придется округлять количество вопросов в большую сторону и терять единственный плюс. Мне повезло и в моем тесте было 64 варианта ответов, что является степенью многих чисел, но если добавить 65-го жука то при использовании 2 вариантов ответа мне потребуется уже 7 вопросов. А 7 вопросами можно закодировать 128 жуков и получается что 63 результата просто пустуют и теряется вот эта удивительная идеальность.
3) Нельзя использовать разное количество вариантов ответа для разных вопросов. Например для теста с комбинацией 6 5 3 (6 вариантов в первом вопросе, 5 вариантов во втором, 3 в третьем) не получиться использовать старую формулу. Но все равно можно соблюсти идеальность, необходимо чтобы выполнялось равенство:
a1 * a2 * a3 * ... * an = r, где
a1 - первый вопрос
an - последний вопрос
r - количество результатов в тесте
К сожалению мир не математически точен (хотяя...). Но тестики пикуко писать все таки надо, поэтому я придумал альтернативный вариант.
Для того чтобы любой путь прохождения теста не привел к 2+ результатам, нужно чтобы каждый результат был отделен от любого другого КАК МИНИМУМ одним вопросом (Чем больше таких вопросов тем точнее конечный результат).
Каждый тест можно представить в виде графа в котором вершины - результаты теста, а ребра - связи. Например 5 результатов можно представить так:

Количество связей = ( r * ( r + 1 )) / 2, где r - количество результатов в тесте. В моем случае с 64 результатами получается 2080 связей, для точного теста необходимо порвать все. Если остается хоть одна связь, значит что в тесте существует путь приводящий сразу к 2 вариантам ответа.
Возникает вопрос: Каким образом отследить все это? Конечно же насмузихлебить программочку которая сделает это все за вас. Моя программа считывала всю необходимую информацию с еще не готового теста и при помощи простых операций над множествами (множества - один из способов представления графа) определяла группы результатов, с не разорванными связями.
В итоге я получил вот такой результат:

Конечно большой вопрос как вообще проверить правильность этого алгоритма, но если вы как и я человек знакомый со всем представленным жучьем, вы поймете что жуки из каждой группы очень похожи друг на друга, это значит что их труднее всего отделить друг от друга и они требуют каких то специфических вопросов. Например разница между Брандлом и Тристрелом из 5 группы состоит только в том что Тристрел стреляет по 3 снаряда, а Брандл по одному. Такие мелочи очень трудно отследить с таким большим количеством результатов.
Потом используя эти данные я дописал недостающие вопросы и получил готовый тест с полной уверенностью что каждый человек, являющийся определенным жуком, получит свой результат точно и без костылей в виде дополнительного вопроса.
Используя этот способ можно создать тест хоть на миллион результатов. Интересно, какой тест самый большой по количеству результатов на всем пикуко? Самый больший из тех что я видел был на 75 результатов (скиньте в комменты если видели больше пж), и когда я его прошел мне задали дополнительный вопрос на +- 10 вариантов ответа, это свидетельствует проблеме которую я описал. Грустно что редактор тестов пикуко абсолютно не приспособлен к созданию таких больших тестов.
Из чего вообще состоит процесс создания теста?
Он состоит из поиска информации, создания вопросов и контроля результатов. Контроль результатов я уже автоматизировал, для сбора информации существуют парсеры и прочие штуки, создание вопросов тоже можно кое-как автоматизировать. Смекаете? Представьте себе тест: Какой ты пользователь пикуко? и результаты теста - буквально все пользователи пикуко. 146075 результатов. В качестве вопросов можно использовать инфу из профилей по типу дата регистрации, количество созданных тестов и прочее. Интересно существует ли ограничение на количество результатов у сайта? И если нет то сколько информации сайт может выдержать в редакторе тестов пока он не откиснет?
Пристрелил бы меня админ если бы я парсил данные по 146075 профилям? (я не буду)1
Поделиться:
Лучшиекомментарии (0)
Комментариев к этому посту пока нет. Хотите оставить первый?