2016-10-22 3 views
0

xはホールデムハンド(ボード+ホールカード)で、J:A = 11:14、A = 1です。スーツは問題ではありません。あなたはストレートをチェックしているだけです。ポーカー:ホールデムパッケージストレート1機能?

x <- c(2,5,6,7,8,9,14) 

これはholdemパッケージのストレート関数です。私は関数の終わりにforループを除くすべてを理解しています。誰かがその部分がどのように働いているか説明してもらえますか?道に迷いました。

function(x){ 
a1 = sort(unique(x)) 
if (length(a1)<4.5) return(0) 
a3 = 0 
n = length(a1) 
if(a1[n] == 14) a1 = c(1,a1) ## count ace as both 1 and 14 
a2 = length(a1) 
for(j in c(5:a2)){ ## j will be the potential highest card of straight 
if(sum(15^c(1:5) * a1[(j-4):j]) == sum(15^c(1:5) * ((a1[j]-4):a1[j]))) a3 = a1[j] 
} 
a3 
} ## end of straight1 
+0

これはおそらく、使用するプログラミング言語でこのタグを付け、読みやすいように書式を整理する必要があります。 –

答えて

0

私は質問が必要とされているかについて、いくつかの明確化が必要だと思います:

Qstraight <-function(x){ 
    a1 = sort(unique(x)) 
    if (length(a1)<4.5) return(0) 
    a3 = 0 
    n = length(a1) 
    if(a1[n] == 14) a1 = c(1,a1) ## count ace as both 1 and 14 
    a2 = length(a1) 
    for(j in c(5:a2)){ 
     ## j will be the potential highest card of straight 
     if(sum(15^c(1:5) * a1[(j-4):j]) == 
      sum(15^c(1:5) * ((a1[j]-4):a1[j]))) a3 = a1[j] 
         } 
    a3 
    } ## end 

だから、これで結果が...私はおそらく一意の値をソートしているだろう

Qstraight(x) 
#[1] 9 # i.e a "nine-high straight 
x2 <- c(2,5,6,7,8,10,14) 
Qstraight(x2) 
#[1] 0 # i.e not a straight at all. 

です次に、rle(diff(unique(sort(x))))$ values == 1の長さの最大値をとります。

+0

これはまっすぐなのかどうかを判断するのに効果的です。上記のモジュラー算術を使わずにストレートで最高のカードの価値を返す簡単な方法はありますか? –

+0

別の質問のように聞こえます。結局のところ、あなたはモジュロ算術でそれをやりたかったのでした。 –

関連する問題