作为提高 PHP 开发人员技能的一种方式,我经常用来自网站 Programming Praxis 的问题来挑战自己。 . 99% 的时间我都可以自己解决这些谜题,但我被这个问题困住了,需要一些关于如何开始的指导。这个谜语叫做“多户住宅”。这是问题所在:
贝克、库珀、弗莱彻、米勒和史密斯住在一栋只有五层楼的公寓楼的不同楼层。贝克不住在顶层。库珀不住在底层。弗莱彻不住在顶层或底层。米勒住在比库珀更高的楼层。史密斯不住在与弗莱彻家相邻的楼层。 Fletcher 不住在与 Cooper 相邻的楼层。每个人都住在哪里?
我的基本问题是:我不明白如何测试和评估不同的逻辑情况。那么举例来说,如果我们要测试贝克是否属于一楼,那么剩下的4个人的测试位置如何最好地“填满”?我的(许多)尝试都在巨大的 If/else if/else 树的底部以挫败告终。
这不是为了家庭作业、金钱或名誉 - 只是一个谜语,我可以用一点帮助开始!
已更新 - 这是我的解决方案!感谢大家的所有投入,不一定优化但至少现在我明白了:
<?php
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;
}
?>
最佳答案
有趣的问题。由于这是一个编程挑战,我认为最好的方法就是生成所有可能的人员安排,并测试他们是否正确。
因为您只是想要一个起点,所以我不打算编写任何实际代码,我只是概述我将如何解决它:
{1, 2, 3, 4, 5} 这样的集合开始,每个元素代表一个人的楼层数,比如按 Baker、Cooper、Fletcher 的顺序,米勒,史密斯。您需要找到所有其他可能的安排。 The algorithm on wikipedia相当简单,应该很容易实现。对于您生成的每个排列,您需要测试所有条件是否都为真。如果任何条件为假,则停止测试并继续进行下一个排列。如果所有条件都满足,你就完成了。所有条件都相当容易测试,例如:
“贝克不住在顶楼。” >> $baker != 5
“Miller 住在比 Cooper 更高的楼层。” >> $miller > $cooper
等等。
关于php - 只是为了好玩 - 开始解决一个棘手的 PHP 逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852221/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下