Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This function checks if one string contains all words from another string, regardless of order
- function containsAllWords(container, contained) {
- var containerWords = container.split(" ");
- var containedWords = contained.split(" ");
- return containedWords.every(word => containerWords.includes(word));
- }
- // This function checks the learner's answer against alternative answers
- function checkAlternativeAnswers(player, learnerAnswer) {
- var altAnswers = [
- player.GetVar("Alt_Answer1"),
- player.GetVar("Alt_Answer2"),
- player.GetVar("Alt_Answer3"),
- player.GetVar("Alt_Answer4")
- ];
- var processedLearnerAnswer = processAnswer(learnerAnswer);
- for (var i = 0; i < altAnswers.length; i++) {
- if (altAnswers[i] && altAnswers[i].trim() !== "") {
- var processedAltAnswer = processAnswer(altAnswers[i]);
- if (containsAllWords(processedLearnerAnswer, processedAltAnswer) ||
- containsAllWords(processedAltAnswer, processedLearnerAnswer)) {
- player.SetVar("Accuracy_Score", 90);
- player.SetVar("Contains_Correct_Answer", false);
- return true; // Match found, terminate further checks
- }
- }
- }
- return false; // No match found
- }
- // This is the main function that compares the learner's answer to the correct answer
- function compareAnswers() {
- var player = GetPlayer();
- var learnerAnswer = player.GetVar("Learner_Answer");
- var correctAnswer = player.GetVar("Correct_Answer");
- var processedLearnerAnswer = processAnswer(learnerAnswer);
- var processedCorrectAnswer = processAnswer(correctAnswer);
- // Check for exact match first
- if (processedLearnerAnswer === processedCorrectAnswer) {
- player.SetVar("Accuracy_Score", 100);
- player.SetVar("Contains_Correct_Answer", true);
- return;
- }
- // Check for partial match with correct answer
- if (containsAllWords(processedLearnerAnswer, processedCorrectAnswer) ||
- containsAllWords(processedCorrectAnswer, processedLearnerAnswer)) {
- player.SetVar("Accuracy_Score", 90);
- player.SetVar("Contains_Correct_Answer", true);
- return;
- }
- // Check against alternative answers
- if (checkAlternativeAnswers(player, learnerAnswer)) {
- return; // If alternative answer matched, terminate the function
- }
- // Calculate partial score for incorrect answers
- var partialScore = calculatePartialScore(processedLearnerAnswer, processedCorrectAnswer);
- player.SetVar("Accuracy_Score", partialScore);
- player.SetVar("Contains_Correct_Answer", false);
- if (partialScore === 0) {
- brieflyChangeScore(player);
- }
- }
- // This function cleans up the answers for easier comparison
- function processAnswer(answer) {
- return answer.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "").trim().toUpperCase().replace(/\s+/g, " ");
- }
- // Function to calculate partial scores, capped at 89%
- function calculatePartialScore(learnerAnswer, correctAnswer) {
- var learnerWords = learnerAnswer.split(" ");
- var correctWords = correctAnswer.split(" ");
- var matchedWords = correctWords.filter(word => learnerWords.includes(word));
- var score = Math.round((matchedWords.length / correctWords.length) * 89);
- return score > 0 ? score : 0; // Ensure we don't return a negative score
- }
- // This function briefly changes the score from 0% to 1% and back
- function brieflyChangeScore(player) {
- player.SetVar("Accuracy_Score", 1);
- setTimeout(function() {
- player.SetVar("Accuracy_Score", 0);
- }, 50);
- }
- // This line runs the main function when the script is executed
- compareAnswers();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement