2016-10-22 46 views
0

說x是一個holdem牌(棋盤+洞牌),其中J:A = 11:14,A可以等於1.套裝並不重要。你只是檢查一下。撲克:Holdem套餐straight1功能?

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

聽起來像另一個問題。畢竟你是那個想用模算法完成的人。 –