1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
function doukaku121(hand){
  var S = [], R = [], sd = {S:0, H:1, D:2, C:3}, rd = {A:1, T:10, J:11, Q:12, K:13};
  hand.toUpperCase().replace(/([SHDC])([2-9TJQKA])/g, function(_, s, r){
    ++S[s = sd[s]]      || (S[s] = 1);
    ++R[r = rd[r] || r] || (R[r] = 1);
  });
  var flush = /5/.test(S +'');
  if(/1,1,1,1,1/.test(R +','+ R[1]))
    return flush ? (R[1] && R[13] ? 'Royal ' : '') +'Straight Flush' : 'Straight';
  switch((R = R.sort(function(x, y){ return y - x }))[0]){
   case 1: return flush     ? 'Flush'      : 'No Pair';
   case 2: return R[1] == 2 ? 'Two Pair'   : 'One Pair';
   case 3: return R[1] == 2 ? 'Full House' : 'Three of a Kind';
   case 4: return 'Four of a Kind';
  }
}