3

これで、ストレートを見つける背後にある基本的なロジックがわかりました。これには、疑似の

   function is_straight(array $cards) {
        sort($cards);

        if(($cards[4] - $cards[0]) == 5) {
                            //Code to make sure the cards in between are increment
            //is straight.
        }
   }

理論的には 5 カード チェックで機能します。

しかし、ストレートを見つけるために 7 枚のカードの配列からカードを取り除くにはどうすればよいでしょうか?

7 枚のカード アレイ内の 5 つのハンドの組み合わせすべてを個別にチェックする必要がありますか?

$cards 配列から 2 枚のカードを削除し、その組み合わせでストレートをチェックしますか?

そのため、コード側ではなく、これの論理的側面に少しこだわっています。

4

3 に答える 3

1

疑似コードで

#filter doubles
cards = array_unique(cards)
sort(cards)

foreach cards as key, value:    

    if not key_exists(cards, key+4):
        return false

    if cards[key+4] == value + 4:
        return true

潜在的により露骨な長いバージョン

#filter doubles
cards = array_unique(cards)
sort(cards)

straight_counter = 1

foreach cards as key, value:    

    if not key_exists(cards, key+1):
        return false

    # is the following card an increment to the current one
    if cards[key+1] == value + 1:
        straight_counter++
    else:
        straight_counter = 1            

    if straight_counter == 5:
        return true
于 2013-10-05T20:08:55.510 に答える
0
    function is_straight(array $array) {
        $alpha = array_keys(array_count_values($array));

        sort($alpha);

        if (count($alpha) > 4) {
            if (($alpha[4] - $alpha[0]) == 4) {
                $result = $alpha[4];
                return $result;
            }
            if (count($alpha) > 5) {
                if (($alpha[5] - $alpha[1]) == 4) {
                    $result = $alpha[5];
                    return $result;
                }
            }
            if (count($alpha) > 6) {
                if (($alpha[6] - $alpha[2]) == 4) {
                    $result = $alpha[6];
                    return $result;
                }
            }
        }
    }
于 2013-10-05T22:41:30.657 に答える
0

1 から 13 までのカードの値を含む配列であると仮定すると$cards、 5 ではなく 4 の差で評価する必要があると思います。

5 - 1 = 4
6 - 2 = 4
7 - 3 = 4
など

また、10、J、Q、K、A の特定のロジックを追加する必要があります。

しかし、あなたの特定の質問については、どうですか:

function is_straight(array $cards) {
    sort($cards);

    if((($cards[4] - $cards[0]) == 4) || 
       (($cards[5] - $cards[1]) == 4) || 
       (($cards[6] - $cards[2]) == 4)) {
                        //Code to make sure the cards in between are increment
        //is straight.
    }
}
于 2013-10-05T22:11:47.223 に答える