Comment detail

ポーカーの役判定 (Nested Flatten)
 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
}

Index

Feed

Other

Link

Pathtraq

loading...