PokerSort All-Browsers

Sorts an array of 5 cards descending with priority on numbers of duplicates followed by rank

by subskybox

JavaScript

//For All Browsers
//Returns a numeric value for a 5 card Poker hand.
//This was inspired by Google Chrome's in-place Insertion Sort.
function getPokerScore(cs) {
    var a = [{v:cs[0], c:1}, {v:cs[1], c:1}, {v:cs[2], c:1}, {v:cs[3], c:1}, {v:cs[4], c:1} ], el, tmp, i, j;
    for (i=1, el=a[i]; i < 5; i++, a[j+1]=el, el=a[i]) {
      for (j = i-1, tmp = a[j]; j >= 0; j--, tmp = a[j]) {
        if (tmp.v == el.v) {el.c = "" + (tmp.c = (tmp.c === el.c) ? tmp.c + el.c: parseInt(tmp.c,10) + 1);}
        if (tmp.v <= el.v) {a[j + 1] = tmp;} else {break;}
      }
    }
    a.sort(function(a,b){return (a.c < b.c) ? +1 : (a.c > b.c) ? -1 : (b.v - a.v);});

    //For Testing
    document.write(a[0].v+ " " + a[1].v+ " " + a[2].v+ " " + a[3].v+ " " + a[4].v + "<br/>");
    document.write(a[0].c+ " " + a[1].c+ " " + a[2].c+ " " + a[3].c+ " " + a[4].c + "<br/>");

    return a[0].v<<16|a[1].v<<12|a[2].v<<8|a[3].v<<4|a[4].v;
}
//All Browsers. Short and Sweet
function getPokerScore2(cs) {
    var a = cs.slice(), d={}, i;
    for (i=0; i<5; i++) {d[a[i]] = (d[a[i]] >= 1) ? d[a[i]] + 1 : 1;}
    a.sort(function(a,b){return (d[a] < d[b]) ? +1 : (d[a] > d[b]) ? -1 : (b - a);});
    return a[0]<<16|a[1]<<12|a[2]<<8|a[3]<<4|a[4];
}

function byPokerHand2(a, b) {
    return (a.c < b.c) ? +1 : (a.c > b.c) ? -1 : (b.v - a.v);
}
function descendingWhileCountingDuplicates2(a, b) {
    if (a.v == b.v) {b.c = "" + (a.c = (a.c === b.c) ? a.c + b.c: parseInt(a.c,10) + 1);}
    return (a.v <= b.v) ? +1 : -1;  
}


var cards = [7,7,7,6,6];
var score = getPokerScore2(cards);
document.write("SCORE: " + score + "<br/>");