这个问题是关于另一个由其他人先前发布的问题:
PHP: Determining Grid Count Between 2 Grids。
注:本问题不需要理解上述问题,我只想提供参考和附加上下文。
我能解决问题,但我不喜欢我的解决方案——它显然是重复的,我知道它可以简化,但我的大脑现在太煎熬了,看不到它我只是不能放弃,直到我有决心睡觉。
这是我目前的有效解决方案(至少是与我的问题相关的部分):
// Note: $col_diff and $row_diff will always be integers between 0 and 4
if ($col_diff==4) {
$d = 5;
}
elseif ($col_diff==3) {
if ($row_diff==4)
$d = 5;
else
$d = 4;
}
elseif ($col_diff==2) {
if ($row_diff==4)
$d = 5;
elseif ($row_diff==3)
$d = 4;
else
$d = 3;
}
elseif ($col_diff==1) {
if ($row_diff==4)
$d = 5;
elseif ($row_diff==3)
$d = 4;
elseif ($row_diff==2)
$d = 3;
else
$d = 2;
}
elseif ($col_diff==0) {
if ($row_diff==4)
$d = 5;
elseif ($row_diff==3)
$d = 4;
elseif ($row_diff==2)
$d = 3;
elseif ($row_diff==1)
$d = 2;
else
$d = 1;
}
echo $d; // Correct!
如何简化此过程并删除冗余?
这就是我所设想的优化结构,但它显然有缺陷:
for ($i=4;$i>=0;$i--)
if ($col_diff==$i)
for ($j=$i;$j>=0;$j--)
if ($row_diff==$j)
$d = $j+1;
echo $d; // NOT Correct!
最佳答案
我用你的代码做了一张桌子:
col 4 3 2 1 0
row
4 5 5 5 5 5
3 5 4 4 4 4
2 5 4 3 3 3
1 5 4 3 2 2
0 5 4 3 2 1
这里有一个模式:一个单元格的值等于它与0,0的距离(请看在右下角居中的数字是如何形成正方形的)。
或:
cell = Max( x, y ) + 1
…有点简单,嗯?
以此作为证据:
cell4,4 = Max( 4, 4 ) + 1 == 5
cell2,3 = Max( 2, 3 ) + 1 == 4
对于您的PHP,这是:
$d = max( $col_diff, $row_diff ) + 1;
就这么简单!
如果域限制在4-0范围内,则添加一个钳制:
$d = max( max( min( $col_diff, 4 ), 0 ), max( min( $row_diff, 4 ), 0 ) + 1;
关于php - 算法简化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23536284/