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 - Scala

パターンマッチって素晴らしい。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
object Poker {
  def whatHand_?(_cs:String) = {
    val rank = Map((0 to 12).map(i => "A23456789TJQK"(i) -> (i+1)).toArray:_*)
    val cs = (0.until(_cs.size, 2)).map(_cs.substring).
               map{s=>(s(0), rank(s(1)))}.toList.sort(_._2<_._2)
    val royalSt_? = cs match{
      case List((_,1),(_,10),(_,11),(_,12),(_,13)) => true
      case _ => false
    }
    val flush_? = cs.forall(cs(0)._1 == _._1)
    val st_? = (1 to 9).map(i=>cs(0)._2==i && cs(4)._2==i+4).exists(true==) || royalSt_?
    val p = (((List(List[(char,int)]())) /: List.make(2, cs)){
              for(i <-_; j <-_) yield j::i
            }.filter(c=>c(0)._2 == c(1)._2).size - 5)/2

    (royalSt_?, flush_?, st_?, p) match {
      case (true, true, _, _) => "Royal flush"
      case (_, true, true,_)  => "Straight flush"
      case (_, true, _ ,_)  => "Flush"
      case (_, _, true ,_)  => "Straight"
      case (_,_,_, 6) => "Four of a kind"
      case (_,_,_, 4) => "Full house"
      case (_,_,_, 3) => "Three of a kind"
      case (_,_,_, 2) => "Two pairs"
      case (_,_,_, 1) => "One pair"
      case _ => "No pair"
    }
  }
}

Index

Feed

Other

Link

Pathtraq

loading...