Last active
October 10, 2016 19:50
-
-
Save IliasDeros/58967d2005c26ebe428ab83b13cfc864 to your computer and use it in GitHub Desktop.
Calculate Poker side pots using this NodeJS script written in javascript ES6.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
let players = process.argv.slice(2) | |
if (players.length < 2) return console.log('There has to be at least two players to calculate side-pots.') | |
players = players | |
// give each player a name | |
.map((p, i) => ({name: `Player ${i + 1}`, bet: p})) | |
// sort from lowest to highest | |
.sort((a, b) => a.bet - b.bet) | |
// distribute side pots | |
const sidePots = [] | |
players.forEach(({name, bet}, currentPlayerIndex) => { | |
// no side pot for the first player that goes all-in | |
if (currentPlayerIndex === 0) return | |
// the last player to go all-in doesn't create a side pot | |
for (let i = currentPlayerIndex - 1;i > 1;i--){ | |
bet -= players[i].bet - players[i - 1].bet | |
} | |
// everyone bets in the main pot | |
bet -= players[0].bet | |
// add current player to all existing sidepots | |
sidePots.forEach(({players}) => players.push(name)) | |
// the side pot is equal to the amount of players in the pot * the minimum bet | |
let sidePot = {pot: (players.length - currentPlayerIndex) * bet, players: [name]} | |
// do not push empty sidepot | |
sidePot.pot && sidePots.push(sidePot) | |
}) | |
// if a player is alone in a side pot he can take back his money right away | |
let potOver | |
const lastSidePot = sidePots.slice(-1)[0] | |
if (lastSidePot.players && lastSidePot.players.length === 1) potOver = sidePots.pop() | |
// OUTPUT | |
potOver && console.log(`${potOver.players[0]} takes back ${potOver.pot}$`) | |
console.log(`Main pot: ${players.length * players[0].bet}$ - All players`) | |
sidePots.forEach(({pot, players}, i) => { | |
console.log(`Side pot ${i + 1}: ${pot}$ - ${players.sort()}`) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment