Advertisement
Double_X

Bet Planner

Nov 22nd, 2022
1,505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 8.61 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <title>Bet Planner</title>
  6.         <script>
  7.             window.onload = () => {
  8.                 const TOTAL = document.getElementById("total");
  9.                 const CHOICE_NUM = document.getElementById("choiceNum");
  10.                 const ALL_BET_CHOICE_HARMONIC_ODDS = document.getElementById("allBetChoiceHarmonicOdds");
  11.                 const ALL_CHOICE_HARMONIC_ODDS = document.getElementById("allChoiceHarmonicOdds");
  12.                 const EXPECTED_WINNING_CHANCE = document.getElementById("expectedWinningChance");
  13.                 const EXPECTED_NET_GAIN = document.getElementById("expectedNetGain");
  14.                 const EXPECTED_NET_GAIN_RATIO = document.getElementById("expectedNetGainRatio");
  15.                 const CHOICES = document.getElementById("choices");
  16.                 const BET_AMOUNT_TEXT_PRE = "Bet Amount: ";
  17.                 const NET_GAIN_TEXT_PRE = "Net Gain: ";
  18.                 const NET_GAIN_RATIO_TEXT_PRE = "Net Gain Ratio: ";
  19.                 TOTAL.onchange = () => {
  20.                     if (+CHOICE_NUM.value !== 0) updateChoiceBets();
  21.                 }, CHOICE_NUM.onchange = () => {
  22.                     if (+TOTAL.value !== 0) updateChoiceNums();
  23.                 };
  24.                 const updateChoiceNums = () => {
  25.                     const { childElementCount } = CHOICES;
  26.                     const choiceNum = +CHOICE_NUM.value;
  27.                     if (choiceNum === childElementCount) return;
  28.                     if (choiceNum > childElementCount) {
  29.                         addChoices(choiceNum - childElementCount);
  30.                     } else removeChoices(childElementCount - choiceNum);
  31.                     updateChoiceBets();
  32.                 }, addChoices = newChoiceNum => {
  33.                     for (let count = 1; count <= newChoiceNum; count++) {
  34.                        addChoice();
  35.                    }
  36.                }, addChoice = () => CHOICES.appendChild(newChoice());
  37.                 const newChoice = () => {
  38.                     const choice = document.createElement("div");
  39.                     choice.appendChild(readOnlyText("Odds"));
  40.                     choice.appendChild(textInput());
  41.                     choice.appendChild(checkboxInput());
  42.                     choice.appendChild(readOnlyText(BET_AMOUNT_TEXT_PRE));
  43.                     choice.appendChild(readOnlyText(NET_GAIN_TEXT_PRE));
  44.                     choice.appendChild(readOnlyText(NET_GAIN_RATIO_TEXT_PRE));
  45.                     choice.appendChild(document.createElement("br"));
  46.                     return choice;
  47.                 }, textInput = () => {
  48.                     const input = document.createElement("input");
  49.                     input.onchange = TOTAL.onchange, input.type = "text";
  50.                     return input;
  51.                 }, checkboxInput = () => {
  52.                     const checkbox = document.createElement("input");
  53.                     checkbox.onchange = TOTAL.onchange;
  54.                     checkbox.type = "checkbox";
  55.                     return checkbox;
  56.                 }, readOnlyText = value => {
  57.                     const text = document.createElement("input");
  58.                     text.readOnly = true;
  59.                     text.type = "text", text.value = value;
  60.                     return text;
  61.                 }, removeChoices = oldChoiceNum => {
  62.                     for (let count = 1; count <= oldChoiceNum; count++) {
  63.                        removeChoice();
  64.                    }
  65.                }, removeChoice = () => {
  66.                     CHOICES.removeChild(CHOICES.lastElementChild);
  67.                 }, updateChoiceBets = () => {
  68.                     const totalBetHarmonicOdds = allBetChoiceHarmonicOdds();
  69.                     updateAllBetChoiceHarmonicOdds(totalBetHarmonicOdds);
  70.                     const totalHarmonicOdds = allChoiceHarmonicOdds();
  71.                     updateAllChoiceHarmonicOdds(totalHarmonicOdds);
  72.                     const expectedWinningChance = totalBetHarmonicOdds / totalHarmonicOdds;
  73.                     updateExpectedWinningChance(expectedWinningChance);
  74.                     const expectedNetGainRatio = 1.0 / totalHarmonicOdds - 1;
  75.                     updateExpectedNetGain(expectedNetGainRatio * +TOTAL.value);
  76.                     updateExpectedNetGainRatio(expectedNetGainRatio);
  77.                     const { childElementCount } = CHOICES;
  78.                     // The 1st child of CHOICES is a text coming from nowhere
  79.                     for (let i = 1; i <= childElementCount; i++) {
  80.                        updateChoiceBet(totalBetHarmonicOdds, i);
  81.                    }
  82.                    //
  83.                }, allChoiceHarmonicOdds = () => {
  84.                     const { childElementCount } = CHOICES;
  85.                     let sum = 0;
  86.                     // The 1st child of CHOICES is a text coming from nowhere
  87.                     for (let i = 1; i <= childElementCount; i++) {
  88.                        const { childNodes } = CHOICES.childNodes.item(i);
  89.                        sum += 1.0 / inputtedOdds(childNodes);
  90.                    }
  91.                    //
  92.                    return sum;
  93.                }, allBetChoiceHarmonicOdds = () => {
  94.                     const { childElementCount } = CHOICES;
  95.                     let sum = 0;
  96.                     // The 1st child of CHOICES is a text coming from nowhere
  97.                     for (let i = 1; i <= childElementCount; i++) {
  98.                        const { childNodes } = CHOICES.childNodes.item(i);
  99.                        if (!isBet(childNodes)) continue;
  100.                        sum += 1.0 / inputtedOdds(childNodes);
  101.                    }
  102.                    //
  103.                    return sum;
  104.                }, updateAllBetChoiceHarmonicOdds = totalBetHarmonicOdds => {
  105.                     ALL_BET_CHOICE_HARMONIC_ODDS.value = totalBetHarmonicOdds;
  106.                 }, updateAllChoiceHarmonicOdds = totalHarmonicOdds => {
  107.                     ALL_CHOICE_HARMONIC_ODDS.value = totalHarmonicOdds;
  108.                 }, updateExpectedWinningChance = expectedWinningChance => {
  109.                     EXPECTED_WINNING_CHANCE.value = expectedWinningChance;
  110.                 }, updateExpectedNetGain = expectedNetGain => {
  111.                     EXPECTED_NET_GAIN.value = expectedNetGain.toFixed(1);
  112.                 }, updateExpectedNetGainRatio = expectedNetGainRatio => {
  113.                     EXPECTED_NET_GAIN_RATIO.value = expectedNetGainRatio;
  114.                 }, updateChoiceBet = (totalBetHarmonicOdds, i) => {
  115.                     const { childNodes } = CHOICES.childNodes.item(i);
  116.                     const odds = inputtedOdds(childNodes);
  117.                     const isChoiceBet = isBet(childNodes);
  118.                     const bet = isChoiceBet ? updatedBet(totalBetHarmonicOdds, odds) : 0;
  119.                     childNodes.item(3).value = updatedChoiceBet(bet);
  120.                     const total = +TOTAL.value, netGain = isChoiceBet ? odds * bet - total : 0;
  121.                     childNodes.item(4).value = updatedChoiceNetGain(netGain);
  122.                     childNodes.item(5).value = `${NET_GAIN_RATIO_TEXT_PRE}${isChoiceBet ? netGain * 1.0 / total : 0}`;
  123.                 }, updatedChoiceBet = bet => {
  124.                     return `${BET_AMOUNT_TEXT_PRE}${bet.toFixed(1)}`;
  125.                 }, updatedChoiceNetGain = netGain => {
  126.                     return `${NET_GAIN_TEXT_PRE}${netGain.toFixed(1)}`;
  127.                 }, inputtedOdds = choiceChildNodes => {
  128.                     return +choiceChildNodes.item(1).value;
  129.                 }, isBet = choiceChildNodes => {
  130.                     return choiceChildNodes.item(2).checked;
  131.                 }, updatedBet = (totalBetHarmonicOdds, odds) => {
  132.                     return +TOTAL.value / totalBetHarmonicOdds / odds;
  133.                 };
  134.             };
  135.         </script>
  136.     </head>
  137.     <body>
  138.         <text>Total Amount</text>
  139.         <input id="total" type="text" />
  140.         <text>No. Of Choices</text>
  141.         <input id="choiceNum" type="text" />
  142.         <br>
  143.         <text>All Bet Choice Harmonic Odds</text>
  144.         <input id="allBetChoiceHarmonicOdds" readOnly=true type="text" />
  145.         <text>All Choice Harmonic Odds</text>
  146.         <input id="allChoiceHarmonicOdds" readOnly=true type="text" />
  147.         <br>
  148.         <text>Expected Winning Chance</text>
  149.         <input id="expectedWinningChance" readOnly=true type="text" />
  150.         <text>Expected Net Gain</text>
  151.         <input id="expectedNetGain" readOnly=true type="text" />
  152.         <text>Expected Net Gain Ratio</text>
  153.         <input id="expectedNetGainRatio" readOnly=true type="text" />
  154.         <div id ="choices" />
  155.     </body>
  156. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement