Skip to content

Instantly share code, notes, and snippets.

@freshlogic
Last active March 17, 2025 02:57

Revisions

  1. freshlogic renamed this gist Mar 17, 2025. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. freshlogic created this gist Mar 17, 2025.
    50 changes: 50 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    const teams = require('./2025.json');

    const percentages = {
    round1: { 1: 100, 2: 94, 3: 85, 4: 78, 5: 68, 6: 66, 7: 60, 8: 48, 9: 52, 10: 40, 11: 34, 12: 35, 13: 22, 14: 15, 15: 6, 16: 0 },
    round2: { 1: 87, 2: 69, 3: 61, 4: 56, 5: 52, 6: 51, 7: 27, 8: 18, 9: 8, 10: 46, 11: 38, 12: 49, 13: 24, 14: 12, 15: 14, 16: 0 },
    round3: { 1: 79, 2: 72, 3: 50, 4: 35, 5: 21, 6: 33, 7: 37, 8: 70, 9: 40, 10: 33, 11: 33, 12: 5, 13: 0, 14: 0, 15: 0, 16: 0 },
    round4: { 1: 59, 2: 46, 3: 47, 4: 72, 5: 75, 6: 23, 7: 0, 8: 57, 9: 50, 10: 0, 11: 60, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0 },
    round5: { 1: 57, 2: 48, 3: 64, 4: 23, 5: 50, 6: 67, 7: 0, 8: 50, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0 },
    round6: { 1: 67, 2: 33, 3: 44, 4: 33, 5: 0, 6: 50, 7: 0, 8: 50, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0 }
    };

    function predictWinner(game, team1, team2) {
    let lowerSeededTeam = team1;
    let higherSeededTeam = team2;

    if (team1.seed === team2.seed) {
    lowerSeededTeam = (team1.net_ranking < team2.net_ranking) ? team1 : team2;
    higherSeededTeam = (lowerSeededTeam === team1) ? team2 : team1;
    } else if (team2.seed < team1.seed) {
    lowerSeededTeam = team2;
    higherSeededTeam = team1;
    } else {
    lowerSeededTeam = team1;
    higherSeededTeam = team2;
    }

    let percentage = percentages['round' + game.round][lowerSeededTeam.seed];

    // 3-point percentage
    percentage += (lowerSeededTeam.three_point_percentage - higherSeededTeam.three_point_percentage) * 1.5;

    // Free Throw Rate (FTA/FGA)
    if (lowerSeededTeam.free_throw_rate && higherSeededTeam.free_throw_rate) {
    percentage += (lowerSeededTeam.free_throw_rate - higherSeededTeam.free_throw_rate) * 1.4;
    }

    // Defensive rebound percentage
    percentage += (lowerSeededTeam.defensive_rebound_percentage - higherSeededTeam.defensive_rebound_percentage) * 1.3;

    // Turnover rate (negative adjustment since fewer turnovers are better)
    percentage += (higherSeededTeam.turnover_percentage - lowerSeededTeam.turnover_percentage) * -1.2;

    const random = Math.random() * 100;

    if (random <= percentage) {
    return lowerSeededTeam; // lower seed advances
    } else {
    return higherSeededTeam; // higher seed advances
    }
    }