Daily Programmer Challenge #170: Blackjack Checker
My submission to: http://www.reddit.com/r/dailyprogrammer/comments/29zut0/772014_challenge_170_easy_blackjack_checker/
by pendensproditor
JavaScript
(function (window) {
var CARD_VALUES = {
"ace": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9,
"ten": 10,
"jack": 10,
"queen": 10,
"king": 10
},
ACE_BONUS_VALUE = 10,
WINNING_VALUE = 21,
CARDS_FOR_TRICK = 5,
parsePlayerHands = function (str) {
var inputLines = str.split('\n'),
hands = {};
for (var i = 1; i < inputLines.length; i++) {
var inputPlayer = inputLines[i].split(':'),
player = inputPlayer[0],
hand = inputPlayer[1];
hands[player] = parsePlayerHand(hand);
}
return hands;
},
parsePlayerHand = function (str) {
var inputCards = str.split(','),
cards = [];
for (var i = 0; i < inputCards.length; i++) {
var inputCard = inputCards[i].trim().split(' '),
card = inputCard[0].toLowerCase();
cards.push(card);
}
return cards;
},
calculateHandValue = function (cards) {
var handValue = 0,
acesFound = 0;
// assume aces are worth 1 at first
for (var i = 0; i < cards.length; i++) {
handValue += CARD_VALUES[cards[i]];
if (cards[i] == 'ace') acesFound++;
}
// for every ace that could improve the hand
// value if it were worth 11, add those points
for (var j = 0; j < acesFound; j++) {
if (handValue + ACE_BONUS_VALUE <= WINNING_VALUE) handValue += ACE_BONUS_VALUE;
}
return handValue;
},
calculateWinningHand = function (str) {
var playerHands =...