Как мне придать некоторым сравнениям массивов больший вес, чем другим, при сопоставлении входных данных по ключу ответа?Javascript

Форум по Javascript
Ответить
Anonymous
 Как мне придать некоторым сравнениям массивов больший вес, чем другим, при сопоставлении входных данных по ключу ответа?

Сообщение Anonymous »

Я создаю программу типа викторины, и у меня есть 8 предустановленных ключей ответов, каждая из которых имеет массив из 15 двоичных значений. Пользователь отвечает на одни и те же 15 вопросов, я сравниваю его массив со всеми 8, а затем возвращаю ближайшее совпадение. Меня больше всего беспокоит то, что некоторые из пресетов различаются всего на 2-3 значения, поэтому «победитель» по сути является произвольным. 2 вопроса, по которым они не согласны, должны иметь большее значение, чем 13, по которым они не согласны.
Есть ли способ определить, какие значения на самом деле различаются между пресетами, и автоматически присвоить более высокие значения, или существует какой-то алгоритм для этого? Думаю, я мог бы жестко запрограммировать веса для каждого вопроса, но это кажется неправильным по своей сути, потому что я каким-то образом подыгрываю то, что должно быть несколько объективным результатом, в идеале веса должны быть рассчитаны с помощью самих пресетов.
Для контекста я обязательно добавил фрагмент кода: пресеты представляют исторических философов, а сами вопросы представляют собой конкретные проблемы с тележкой. Я позаботился о том, чтобы преобразовать логические значения в 0 и 1, чтобы облегчить любое возможное алгоритмическое вмешательство, которое я мог получить. Спасибо.
const philosophers = [
{
name: "Nietzsche",
answers: [1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]
},
{
name: "Diogenes",
answers: [1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]
},
{
name: "Aquinas",
answers: [0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0]
}
];

function findMatch(userAnswers) {
let bestMatch = "";
let highScore = 0;

for (let i = 0; i < philosophers.length; i++) {
let score = 0;
for (let j = 0; j < userAnswers.length; j++) {
if (userAnswers[j] === philosophers.answers[j]) {
score++;
}
}
if (score > highScore) {
highScore = score;
bestMatch = philosophers.name;
}
}

return bestMatch;
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-matching
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»