Testdome船只移动题目代码测试失败,求排查思路
问题
我的PHP代码在Testdome的测试中未通过,测试结果如下:
- 示例用例:答案正确
- 所有坐标在网格内:答案错误
- 部分坐标在网格外:答案错误
我检查了路径中所有值(包括起点和终点)是否存在于$gameMatrix数组中,认为只要值为true或false,就表示该坐标在网格内。我尝试了各种边缘情况的自定义单元测试,但无法复现失败场景。还尝试添加了船只的最大移动距离限制,但似乎不是问题所在,题目文档中也未提及该限制。
我的代码:
<?php /** * @return boolean The destination is reachable or not */ function canTravelTo(array $gameMatrix, int $fromRow, int $fromColumn, int $toRow, int $toColumn) : bool { if($fromRow == $toRow){ // 水平移动 // if(abs($fromColumn - $toColumn) > 2) // return false; // 超出移动范围? $toCheck = range($fromColumn, $toColumn); foreach($toCheck as $col){ if(!isset($gameMatrix[$fromRow][$col])) return false; // 超出边界 if(!$gameMatrix[$fromRow][$col]) return false; // 路径被阻挡 } return true; }elseif($fromColumn == $toColumn){ // 垂直移动 // if(abs($fromRow - $toRow) > 2) // return false; // 超出移动范围? $toCheck = range($fromRow, $toRow); foreach($toCheck as $row){ if(!isset($gameMatrix[$row][$fromColumn])) return false; // 超出边界 if(!$gameMatrix[$row][$fromColumn]) return false; // 路径被阻挡 } return true; }else{ // 不允许对角线移动 return false; } } $gameMatrix = [ [false, true, true, false, false, false], [true, true, true, false, false, false], [true, true, true, true, true, true], [false, true, true, false, true, true], [false, true, true, true, false, true], [false, false, false, false, false, false], ]; echo canTravelTo($gameMatrix, 3, 2, 2, 2) ? "true\n" : "false\n"; // 合法移动,输出true echo canTravelTo($gameMatrix, 3, 2, 3, 4) ? "true\n" : "false\n"; // 无法穿过障碍,输出false echo canTravelTo($gameMatrix, 3, 2, 6, 2) ? "true\n" : "false\n"; // 超出边界,输出false
请问我遗漏了什么明显的问题吗?
内容的提问来源于stack exchange,提问作者Esben Tind
相关产品推荐
相关产品推荐

