function calculateMatch() { // Get input values var pointsPlayer1 = parseInt(document.getElementById('pointsPlayer1').value, 10); var pointsPlayer2 = parseInt(document.getElementById('pointsPlayer2').value, 10); var gamesWonPlayer1 = parseInt(document.getElementById('gamesWonPlayer1').value, 10); var gamesWonPlayer2 = parseInt(document.getElementById('gamesWonPlayer2').value, 10); var resultElement = document.getElementById('result'); var resultText = ""; var pointsChange = [0, 0]; // [Points Change for Player 1, Points Change for Player 2] // Determine the winner and type of result var winner = gamesWonPlayer1 > gamesWonPlayer2 ? 1 : (gamesWonPlayer1 < gamesWonPlayer2 ? 2 : 0); var pointsDiff = Math.abs(pointsPlayer1 - pointsPlayer2); var resultType = winner === 1 ? (pointsPlayer1 >= pointsPlayer2 ? "Expected" : "Unexpected") : winner === 2 ? (pointsPlayer2 >= pointsPlayer1 ? "Expected" : "Unexpected") : ""; // Calculate points change based on the result type and points difference if (resultType === "Expected") { pointsChange = calculateExpectedPointsChange(pointsDiff, winner); } else if (resultType === "Unexpected") { pointsChange = calculateUnexpectedPointsChange(pointsDiff, winner); } // Format result text if (winner === 0) { resultText = gamesWonPlayer1 + " : " + gamesWonPlayer2 + " - Incorrect score entered, no winner"; } else { resultText = "Combination N: (" + gamesWonPlayer1 + " : " + gamesWonPlayer2 + ") - " + resultType + " result\n"; resultText += "Player 1 points change: " + formatPointsChange(pointsChange[0]) + "\n"; resultText += "Player 2 points change: " + formatPointsChange(pointsChange[1]); } // Display the result resultElement.innerText = resultText; } function calculateExpectedPointsChange(pointsDiff, winner) { var changes = getPointsChangeValues(pointsDiff, true); return winner === 1 ? changes : changes.reverse(); } function calculateUnexpectedPointsChange(pointsDiff, winner) { var changes = getPointsChangeValues(pointsDiff, false); return winner === 1 ? changes : changes.reverse(); } function getPointsChangeValues(pointsDiff, isExpected) { if (pointsDiff >= 500) return [0, 0]; var tiers = isExpected ? [[0, 24, 6, -5], [25, 49, 5.5, -4.5], [50, 99, 5, -4], [100, 149, 4, -3], [150, 199, 3, -2], [200, 299, 2, -1], [300, 399, 1, -0.5], [400, 499, 0.5, 0]] : [[0, 24, 6, -5], [25, 49, 7, -6], [50, 99, 8, -7], [100, 149, 10, -8], [150, 199, 13, -10], [200, 299, 17, -12.5], [300, 399, 22, -16], [400, 499, 28, -20], [500, Infinity, 40, -29]]; for (var i = 0; i < tiers.length; i++) { if (pointsDiff >= tiers[i][0] && pointsDiff <= tiers[i][1]) { return [tiers[i][2], tiers[i][3]]; } } } function formatPointsChange(change) { return (change > 0 ? "+" : "") + change; // Add a plus sign for positive changes }