UNPKG

poker-odds-calculator

Version:

A pre-flop and post-flop odds calculator for Texas Holdem

86 lines 3.02 kB
#!/usr/bin/env node /** * Odds Calculator CLI */ /* eslint-disable */ import chalk from "chalk"; import { Command } from "commander"; import { CardGroup, OddsCalculator } from "../index.js"; const program = new Command(); program .option('-b, --board <cards>', 'sets the board') .option('-g, --game <game variant name>', 'sets the game variant for calculation. options: full, short.', 'full') .argument('<hand...>', 'players hands') .parse(process.argv); const opts = program.opts(); const hands = program.args; function printHeader() { console.log(chalk.bold.magentaBright("\n♠️♥️ Poker Odds Calculator ♣️♦️\n")); } function suitToEmoji(card) { return card .replace(/h/g, "♥️") .replace(/d/g, "♦️") .replace(/s/g, "♠️") .replace(/c/g, "♣️"); } try { printHeader(); const gameVariant = opts.game; if (gameVariant !== "short" && gameVariant !== "full") { program.outputHelp(); throw Error(`❌ Invalid game variant: ${gameVariant}`); } const board = opts.board ? CardGroup.fromString(opts.board) : null; const cardgroups = []; for (const hand of hands) { cardgroups.push(CardGroup.fromString(hand)); } if (cardgroups.length <= 1) { throw new Error("❌ You must enter at least 2 hands"); } const result = OddsCalculator.calculate(cardgroups, board, gameVariant); const prepend = board !== null ? "" : "~"; if (board) { console.log(chalk.yellowBright.bold("Board: " + suitToEmoji(board.toString().replace(/ /g, " ")))); console.log(""); } // Find winners for gold coloring 🥇 let mostEquityIndex = []; let mostEquity = 0; for (let i = 0; i < cardgroups.length; i += 1) { const curEquity = result.equities[i].getEquity() + result.equities[i].getTiePercentage(); if (curEquity >= mostEquity) { if (curEquity > mostEquity) { mostEquityIndex = [i]; } else { mostEquityIndex.push(i); } mostEquity = curEquity; } } for (let i = 0; i < cardgroups.length; i += 1) { const s = `Player #${i + 1} ${mostEquityIndex.includes(i) ? "🥇" : " "} ` + chalk.cyanBright(suitToEmoji(cardgroups[i].toString().replace(/ /g, " "))) + " " + prepend + result.equities[i]; if (mostEquityIndex.includes(i)) { console.log(chalk.bold.greenBright(s)); } else { console.log(chalk.redBright(s)); } } if (board === null || board.length <= 3) { console.log(""); console.log(chalk.gray(`⏱️ Simulated ${result.getIterationCount().toLocaleString()} random boards in ${(result.getElapsedTime() / 1000).toFixed(1)} seconds`)); } console.log(); } catch (err) { console.log(chalk.redBright(`❌ ${err.message}`)); } //# sourceMappingURL=poker-odds-calculator.js.map