作为提高我作为
PHP开发人员的技能的一种方法,我经常挑战自己来自网站
Programming Praxis的问题.99%的时间我自己可以解决谜语,但是我对这个问题很困惑,需要一些指导如何获得开始.这个谜语被称为“多重住宅”.这是问题所在:
Baker,Cooper,Fletcher,Miller和Smith住在一栋仅有五层楼的公寓楼的不同楼层.贝克不住在顶楼.库珀不住在底层.弗莱彻不住在顶层或底层.米勒生活在比库珀更高的楼层.史密斯不住在弗莱彻附近的地板上.弗莱彻并不住在库珀附近的地板上.每个人住在哪里?
我的基本麻烦是:我不明白如何测试和评估不同的逻辑情况.例如,如果我们想测试Baker是否属于一楼,那么如何最好地“填写”其余四个人中每个人的测试位置?我(很多)的尝试都以大量的If / else if / else树的底部受挫而告终.
这不是作业,金钱或名气 – 只是一个谜,我可以使用一点帮助开始!
更新 – 这是我的解决方案!感谢大家的所有输入,不一定优化,但至少现在我明白了:
function testThisOne ($testList) {
$MillerFloor = "";
$CooperFloor = "";
$SmithFloor = "";
$FletcherFloor = "";
foreach ($testList as $key => $person) if ($person == "Miller") $MillerFloor = $key;
foreach ($testList as $key => $person) if ($person == "Cooper") $CooperFloor = $key;
foreach ($testList as $key =>$person) if ($person == "Smith") $SmithFloor = $key;
foreach ($testList as $key => $person) if ($person == "Fletcher") $FletcherFloor = $key;
if ($testList[4] == "Baker") return false;
if ($testList[0] == "Cooper") return false;
if ($testList[0] == "Fletcher" || $testList[4] == "Fletcher") return false;
if ($MillerFloor < $CooperFloor) return false;
if (abs($SmithFloor - $FletcherFloor) == 1 || abs($CooperFloor - $FletcherFloor) == 1) return false;
return true;
}
function puzzleSolve1() {
$people = array("Baker","Cooper","Fletcher","Miller","Smith");
do {
shuffle($people);
} while (!testThisOne($people));
return $people;
}
?>