challenge ポーカーの役判定

引数に手札を与えると、ポーカーの役を表示するプログラムを作ってください。

条件:

  • スートはS,D,H,C、ランクはA,2~9,T,J,Q,Kのそれぞれ一文字で表します。
  • 手札は S2D5H3CQS9 のように10文字で指定されます。特にソートはされていません。
  • 手札にジョーカーは含まれません。
  • ストレートで取りうるランクの種類はA2345, 23456 ... 9TJQK, TJQKAの10種類で、JQKA2のようにK-A-2をまたぐものはストレートではありません。

実行例:

% ./poker SQSJSASKST
Royal flush

% ./poker D9D7D6D5D8
Straight flush

% ./poker C2D2S2H3H2
Four of a kind

% ./poker C2D3S2H3H2
Full house

% ./poker S9S4S8STSJ
Flush

% ./poker C4H7D5S6H3
Straight

% ./poker S6H6C5DQC6
Three of a kind

% ./poker S6HQC5DQC6
Two pair

% ./poker S6H4C5DQC6
One pair

% ./poker SJSQSKSAC2
No pair

お題にしようと思っていたのに間違えてしまいました。今から変更可能でしょうか?

(説明)
当初間違ってトピックに投稿していたので、このようなコメントを付けていたのですが、
このコメントに気づいた管理人さんにお題に移していただきました。
(最初の2つだけ投稿日時が早いのはそのためです)

Posted feedbacks - JavaScript

 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';
  }
}

Index

Feed

Other

Link

Pathtraq

loading...