不能稱之爲算法的算法(一) 棋牌類的3連牌

算法需求:傳入一個二維數組。將二維數組中 3個連續的數組成一個新的二維數組 a,將不符合要求的數組成一個新的一維數組 b,返回 a,b。php

aa = [[11,12,13,13,17,15,16,17],[23,23,24]]

//
//計算分離
//
//結果
 a = [[11,12,13],[15,16,17]]  b = [13,17,23,23,24]


沒有想到這個邏輯的使用場景,看了Python的寫法 以爲挺有意思的,就試了試。python

貼上羣裏dalao的Python代碼算法

def test(a):
            b = []
            flag = 0
            for i in a:
                if len(a) > 2:
                    if a[flag] in a and a[flag] + 1 in a and a[flag] + 2 in a:
                        n1 = a[flag]
                        n2 = a[flag] + 1
                        n3 = a[flag] + 2
                        a.remove(n1)
                        a.remove(n2)
                        a.remove(n3)
                        b.append([n1, n2, n3])
                        # print b
                    else:
                        flag += 1
            
            return b, a



如下是我用php實現的代碼數組

//$aa = [[11,12,13,13,17,15,16,17],[23,23,24]];
$aa  = [[1,2],[21,22]] ;
function get_between_arr($array){
	list($num_1) = $array;
	if(!is_array($num_1) || count($array)<=0){
		return '必須傳入二維數組且數組不能爲空';
	}
	$list = [];
	foreach($array as $k=>$v){
		$list = array_merge($list,$v);
	}
	if(empty($list)){
		return '基礎數組爲空';
	}
	sort($list);
	$a = $b = [];
	while(isset($list[0])){
		if(count($list)<=2){
			$b = array_merge($list,$b);
			array_splice($list,0,2);
			return [$a,$b];
		}
		if($list[0]+1==$list[1]&&$list[0]+2==$list[2]){
			$a[] = [$list[0],$list[1],$list[2]];
			array_splice($list,0,3);
		}else{
			$b[] = $list[0];
			array_splice($list,0,1);
		}
	}
	return [$a,$b];
}
$result = get_between_arr($aa);
var_dump($result);

之因此說「不是算法的算法」,是由於徹底不知道它的使用場景在哪裏,還有就是 個人代碼有點渣,目前只是實現需求。app


05/17code

終於知道了算法的應用場景。。。。rem