php - 最短验证是否是同花顺
本文介绍了php - 最短验证是否是同花顺的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
['as', '10h', '9d', 'qc', '3h']
'as'
= 'a'
是'A','s'
是花色
这样一个array,需要写一个function用最短的字符验证是否为顺子或者同花顺
写了半天,最简单的也需要很多行,说是有人用70个字符完成过,感觉不太可能。。
解决方案
function check($list) {
$bits = 0;
$same = true;
$map = ['a'=>1, 'j'=>11, 'q'=>12, 'k'=>13];
foreach ($list as $poke) {
$n = substr($poke, 0, -1);
$n = isset($map[$n]) ? $map[$n] : intval($n);
$bits |= (1 << $n);
$c = substr($poke, -1);
$same = ($same === true || $same == $c) ? $c : false;
}
$bits = ($bits << 3) | ($bits >> 10);
for ($i=0; $i<14; $i++) {
if ((($bits >> $i) & 31) == 31){
return ($same ? '同花顺' : '顺子');
}
}
return '烂牌';
}
echo check(['1h', '10h', 'jh', 'kh', 'qh']);
利用了位操作符, 可以方便的判断顺子, 无需进行排序.
这篇关于php - 最短验证是否是同花顺的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文