提高php逻辑,只是为了好玩 – 开始解决一个棘手的PHP逻辑问题

作为提高我作为

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;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值