Skip to content

Instantly share code, notes, and snippets.

@timmyomahony
Created September 25, 2013 18:53
Show Gist options
  • Save timmyomahony/6704263 to your computer and use it in GitHub Desktop.
Save timmyomahony/6704263 to your computer and use it in GitHub Desktop.
var single_pair_validator = function(hand){
};
var high_card_validation = function(white_numbered_hand, black_numbered_hand){
for(var i=0; i < white_numbered_hand.length; i++){
if(white_numbered_hand[i] > black_numbered_hand[i]){
return "White wins";
}
if(white_numbered_hand[i] < black_numbered_hand[i]){
return "Black wins";
}
}
return "They tie";
};
var poker_validator = function(white_hand, black_hand) {
var white_numbered_hand = convert_hand_to_numbers(white_hand);
white_numbered_hand = white_numbered_hand.sort(sortNumber);
var black_numbered_hand = convert_hand_to_numbers(black_hand);
black_numbered_hand = black_numbered_hand.sort(sortNumber);
var validators = [high_card_validation];
var result;
for(var i = 0; i < validators.length; i++){
result = validators[i](white_numbered_hand, black_numbered_hand);
}
return result;
};
var convert_card_to_number = function(card){
var rank = card.slice(0, card.length - 1);
var suit = card.slice(-1);
var number = parseInt(rank);
if(!isNaN(number)){
return number;
}
return {
"J": 11,
"Q": 12,
"K": 13,
"A": 14
}[rank];
};
var convert_hand_to_numbers = function(hand){
var result = Array();
for(var i=0; i < hand.length; i++){
result.push(convert_card_to_number(hand[i]));
}
return result;
}
var highest_card = function(hand){
var numbered_hand = convert_hand_to_numbers(hand);
return numbered_hand.sort(sortNumber)[0];
};
function sortNumber(a,b) {
return b - a;
}
describe('Highest Card Finder',function(){
it('finds highest number', function(){
var hand = ['2H', '3D', '5S', '9C', '4H'];
expect(highest_card(hand)).toBe(9);
});
it('finds king', function(){
var hand = ['2H', '3D', '5S', '9C', 'KH'];
expect(highest_card(hand)).toBe(13);
});
it('finds queen', function(){
var hand = ['2H', '3D', '5S', '9C', 'QH'];
expect(highest_card(hand)).toBe(12);
});
});
describe('Convert Card To Number',function(){
it('converts number', function(){
expect(convert_card_to_number("4H")).toBe(4);
});
it('converts non number', function(){
expect(convert_card_to_number("JH")).toBe(11);
});
it('converts 10', function(){
expect(convert_card_to_number("10H")).toBe(10);
});
});
describe('Convert Hand To Numbers',function(){
it('converts number', function(){
var hand = ["4H", "3C", "KD", "AS", "8S"];
var result = [4,3,13,14,8];
expect(convert_hand_to_numbers(hand)).toEqual(result);
});
it('converts non number', function(){
expect(convert_card_to_number("JH")).toBe(11);
});
});
describe('Poker Validator',function(){
it('says black wins',function(){
var white_hand = ['2H', '3D', '5S', '9C', 'KD'];
var black_hand = ['2C', '3H', '4S', '8C', 'AH'];
expect(poker_validator(white_hand, black_hand)).toBe('Black wins');
});
it('says white wins',function(){
var black_hand = ['2H', '3D', '5S', '9C', 'KD'];
var white_hand = ['2C', '3H', '4S', '8C', 'AH'];
expect(poker_validator(white_hand, black_hand)).toBe('White wins');
});
it('says they tie with same cards',function(){
var black_hand = ['2H', '3D', '5S', '9C', 'KD'];
var white_hand = ['2C', '3H', '5C', '9H', 'KH'];
expect(poker_validator(white_hand, black_hand)).toBe('They tie');
});
it('says black wins with matching highest card',function(){
var black_hand = ['2H', '3D', '5S', '9C', 'KD'];
var white_hand = ['2C', '3H', '4S', '8C', 'KH'];
expect(poker_validator(white_hand, black_hand)).toBe('Black wins');
});
it('says white wins with matching highest card with reversed ordering',function(){
var black_hand = ['KD', '2H', '3D', '7C', '5S'];
var white_hand = ['2C', 'KH', '3H', '4S', '8C'];
expect(poker_validator(white_hand, black_hand)).toBe('White wins');
});
});
describe('Pair Validator',function(){
it('hand has pair',function(){
var hand = ['2H', '2D', '5S', '9C', 'KD'];
expect(pair_validator(hand)).toBeTruthy();
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment