UNPKG

poker-evaluatehand

Version:

A library to evaluate 3, 5, 6 or 7 card poker hands (Updated from poker-evaluator)

106 lines (100 loc) 2.19 kB
//converts 3 card to lowest equivalent 5 card hand module.exports = { CARDVALS: ['2', '3', '4', '5', '6', '7', '8', '9', 't', 'j', 'q', 'k', 'a'], CARDS: { "2c": 1, "2d": 2, "2h": 3, "2s": 4, "3c": 5, "3d": 6, "3h": 7, "3s": 8, "4c": 9, "4d": 10, "4h": 11, "4s": 12, "5c": 13, "5d": 14, "5h": 15, "5s": 16, "6c": 17, "6d": 18, "6h": 19, "6s": 20, "7c": 21, "7d": 22, "7h": 23, "7s": 24, "8c": 25, "8d": 26, "8h": 27, "8s": 28, "9c": 29, "9d": 30, "9h": 31, "9s": 32, "tc": 33, "td": 34, "th": 35, "ts": 36, "jc": 37, "jd": 38, "jh": 39, "js": 40, "qc": 41, "qd": 42, "qh": 43, "qs": 44, "kc": 45, "kd": 46, "kh": 47, "ks": 48, "ac": 49, "ad": 50, "ah": 51, "as": 52 }, makesStraight: function(cardsUsed, rank) { //add ace to bottom as well var newCards = [cardsUsed[12]].concat(cardsUsed); //add in new card (pushed up one by ace) newCards[rank+1] = 2; //determine if there are 5 cards in a row return 5 === newCards.reduce(function(prev, next) { if (prev === 5) { return 5; } else { return next ? prev + 1 : 0; } }); }, fillHand: function(cards) { var cardsUsed = [0,0,0,0,0,0,0,0,0,0,0,0,0]; //convert each card to vals 0-12, strip suit cards.forEach(function(card) { var i = Math.floor((this.CARDS[card.toLowerCase()]-1)/4); cardsUsed[i] = 1; }, this); var toFill = 2; //need to fill 2 cards //fill in <toFill> cards to complete 5 card hand for (var i = 0; i < 13; i++) { if (toFill == 0) break; //done filling //prevent adding a card to finish a straight if (cardsUsed[i] == 0 && !this.makesStraight(cardsUsed,i)) { cardsUsed[i] = 2; toFill--; } } //fill dummy cards for lowest possible hand var suit = ['s', 'd']; for (var i = 0; i <= 13; i++) { if (cardsUsed[i] == 2) { var card = this.CARDVALS[i] + suit[0]; suit.splice(0, 1); cards.push(card); } } return cards; } };