PHP使用算法求出最大同花顺(优化版2.0)
<?php
$poker = array (
0 =>
array (
0 => 1,
1 => 2,
2 => 1,
3 => 4,
4 => 1,
5 => 3,
6 => 2
),
1 =>
array (
0 => 1,
1 => 6,
2 => 9,
3 => 10,
4 => 11,
5 => 12,
6 => 13
)
);
$max_flush_count = 7;
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[5,6,7,8,9,10,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[5,6,7,8,9,10,12]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[3,4,7,8,9,10,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[2,4,5,6,7,8,10]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[2,4,5,6,7,8,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[1,2,4,5,6,8,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[2,4,5,6,7,9,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$max_flush_count = 6;
$poker = [[1,1,1,1,1,1],[6,7,8,9,10,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[6,7,8,9,10,12]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[5,7,8,9,10,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[5,7,8,9,11,12]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[1,7,8,9,11,12]];
var_dump(get_straight_flush($poker,$max_flush_count));
$max_flush_count = 5;
$poker = [[1,1,1,1,1],[7,8,9,10,11]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[7,8,9,10,12]];
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[1,7,8,9,10]];
var_dump(get_straight_flush($poker,$max_flush_count));
function get_straight_flush($result_poker,$max_flush_count)
{
$king = [10,11,12,13,1];
$res = array_intersect($king,$result_poker[1]);
if(count($res) == 5){
$poker_level = 10;
$result_poker[1] = $king;
$result_poker[0][] = $result_poker[0][0];
unset($result_poker[0][0]);
unset($result_poker[0][1]);
unset($result_poker[0][2]);
}else if($result_poker[1][0] == 1 && $result_poker[1][4] == 5){
$poker_level = 10;
unset($result_poker[0][5]);
unset($result_poker[0][6]);
unset($result_poker[1][5]);
unset($result_poker[1][6]);
}else{
$poker_level = 6;
$start = $max_flush_count - 5;
for ($i=$start; $i >= 0; $i--) {
if($result_poker[1][$i+4] - $result_poker[1][$i] == 4){
$poker_level = 9;
foreach ($result_poker[1] as $k => $v) {
if($k < $i || $k > $i+4){
unset($result_poker[0][$k]);
unset($result_poker[1][$k]);
}
}
break;
}
}
if($poker_level == 6){
if($max_flush_count > 5){
foreach ($result_poker[1] as $k => $v) {
if(!empty($result_poker[1][0]) && $result_poker[1][0] == 1){
if($k !== 0 && $k <= $max_flush_count - 5){
unset($result_poker[0][$k]);
unset($result_poker[1][$k]);
}
}else{
if($k < $max_flush_count - 5){
unset($result_poker[0][$k]);
unset($result_poker[1][$k]);
}
}
}
}
}
}
return array(
'poker_level' => $poker_level,
'result_poker' => $result_poker
);
}