ポーカーの役判定
お題にしようと思っていたのに間違えてしまいました。今から変更可能でしょうか?
(説明) 当初間違ってトピックに投稿していたので、このようなコメントを付けていたのですが、 このコメントに気づいた管理人さんにお題に移していただきました。 (最初の2つだけ投稿日時が早いのはそのためです)
Posted feedbacks - D
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import std.stdio;
import std.string;
string poker(string cards){
auto suit = "SDHC";
auto rankOrder = "A23456789TJQK";
auto transRankOrder = "abcdefghijklm";
auto transRank = translate(cards, maketrans(rankOrder, transRankOrder), suit).sort;
int[char] rankCount;
foreach(c; transRank){
rankCount[c]++;
}
auto pairPattern = rankCount.values.sort;
auto hand = pairPattern == [1, 1, 1, 2] ? "One pair" :
pairPattern == [1, 2, 2] ? "Two pair" :
pairPattern == [1, 1, 3] ? "Three of a kind" :
pairPattern == [2, 3] ? "Full house" :
pairPattern == [1, 4] ? "Four of a kind" : "";
if(hand == ""){
auto isFlush = cards[0] == cards[2] && cards[0] == cards[4] &&
cards[0] == cards[6] && cards[0] == cards[8];
hand = find(transRankOrder, transRank) != -1 ?
(isFlush ? "Straight flush" : "Straight") :
transRank == (transRankOrder[0] ~ transRankOrder[($ - 4)..$]) ?
(isFlush ? "Royal flush" : "Straight") :
(isFlush ? "Flush" : "No pair");
}
return hand;
}
void main(){
writefln(poker("SQSJSASKST")); // Royal flush
writefln(poker("D9D7D6D5D8")); // Straight flush
writefln(poker("C2D2S2H3H2")); // Four of a kind
writefln(poker("C2D3S2H3H2")); // Full house
writefln(poker("S9S4S8STSJ")); // Flush
writefln(poker("C4H7D5S6H3")); // Straight
writefln(poker("S6H6C5DQC6")); // Three of a kind
writefln(poker("S6HQC5DQC6")); // Two pair
writefln(poker("S6H4C5DQC6")); // One pair
writefln(poker("SJSQSKSAC2")); // No pair
}
|






xsd
#4978()
Rating6/10=0.60
引数に手札を与えると、ポーカーの役を表示するプログラムを作ってください。
条件:
実行例:
see: ポーカー - Wikipedia
1 reply [ reply ]