all repos — casinocalc-pwa @ 934c917778731dbf049d9e8237091dd1d1e164b2

Repetition-based calculator.

src/utils/calculatorFunctions.ts (view raw)

  1export interface RepetitionResult {
  2  player: number;
  3  bank: number;
  4  vPlayer: number;
  5  vBank: number;
  6}
  7
  8export function round(number: number, decimals: number = 0): number {
  9  return Number(number.toFixed(decimals));
 10}
 11
 12export function p(player: number, odd1: number, exp: number): number {
 13  return player * Math.pow(odd1, exp);
 14}
 15
 16export function calculateOutcome(
 17  player1: number,
 18  odd1: number,
 19  player2: number,
 20  refund: number = 0,
 21): number {
 22  return player1 * odd1 - player1 - player2 + refund;
 23}
 24
 25export function counterPlayer(
 26  player: number,
 27  odd1: number,
 28  odd2: number,
 29  refund: number = 0,
 30): number {
 31  return round((player * odd1 - refund) / odd2, 0);
 32}
 33
 34export function calculateRepetitions(
 35  player: number,
 36  refund: number,
 37  odd1: number,
 38  odd2: number,
 39  repetitions: number = 1,
 40): RepetitionResult[] {
 41  if (!integrityChecks(player, refund, odd1, odd2, repetitions)) return [];
 42
 43  const result: RepetitionResult[] = [];
 44  let i = repetitions - 1;
 45  let tempPlayer = p(player, odd1, i);
 46  let oldPlayer: number;
 47  let tempBank = counterPlayer(tempPlayer, odd1, odd2, refund);
 48
 49  result[i] = {
 50    player: tempPlayer,
 51    bank: tempBank,
 52    vPlayer: round(calculateOutcome(tempPlayer, odd1, tempBank), 2),
 53    vBank: round(calculateOutcome(tempBank, odd2, tempPlayer, refund), 2),
 54  };
 55
 56  for (i--; i >= 0; i--) {
 57    oldPlayer = tempPlayer;
 58
 59    tempPlayer = round(p(player, odd1, i));
 60    tempBank = round(
 61      (tempPlayer * odd1 + tempBank * odd2 - tempBank - oldPlayer) / odd2,
 62      0,
 63    );
 64
 65    result[i] = {
 66      player: tempPlayer,
 67      bank: tempBank,
 68      vPlayer: round(calculateOutcome(tempPlayer, odd1, tempBank), 2),
 69      vBank: round(calculateOutcome(tempBank, odd2, tempPlayer, refund), 2),
 70    };
 71  }
 72  return result;
 73}
 74
 75export function calculateMinimumProfit(repArray: RepetitionResult[]): number {
 76  const n = repArray.length;
 77  const outcomes: number[] = [];
 78
 79  let totalPlayer = 0;
 80
 81  for (let i = 0; i < n; i++) {
 82    outcomes.push(totalPlayer + repArray[i].vBank);
 83    totalPlayer += repArray[i].vPlayer;
 84  }
 85  outcomes.push(totalPlayer);
 86
 87  return Math.min(...outcomes);
 88}
 89
 90export function integrityChecks(
 91  player: number,
 92  refund: number,
 93  odd1: number,
 94  odd2: number,
 95  repetitions: number,
 96): boolean {
 97  if (
 98    isNaN(player) ||
 99    isNaN(refund) ||
100    isNaN(odd1) ||
101    isNaN(odd2) ||
102    isNaN(repetitions)
103  ) {
104    return false;
105  }
106
107  if (player < 1 || refund < 0 || odd1 < 1 || odd2 < 1 || repetitions < 1) {
108    return false;
109  }
110  return true;
111}
112
113export function calculateStake(percentage: number, value: number): number {
114  return Math.ceil((100 * value) / percentage);
115}