当您需要对它们进行编程以满足时,您可能知道两个机器人掉线的问题.
两架机器人从飞机上掉落并使用降落伞降落在一条线上(具有不连续的位置),降落伞留在着陆点.这些机器人都朝北,它们相距不远,一个机器人直接落在另一个机器人的东边.
现在要对机器人进行编程,使它们彼此相遇.可以指示他们向左或向右移动到相邻位置并检查当前位置是否存在降落伞.如果遇到另一个机器人,两个机器人都会停在那里,从此过上幸福的生活.
降落伞检查可以有条件地执行任意数量的指令,并且可以无条件地重复任何指令块.写下两个机器人可以同时跟随的程序以及他们遇到的哪些服务员.
你必须创建一个适用于两个机器人的通用算法(一个小的pleonastic)保证机器人会遇到.他们将降落伞留在掉落的地方,他们可以检查当前位置是否有降落伞.
原始声明如下:http://en.wikibooks.org/wiki/Puzzles/Logic_puzzles/Parachuted_Robots 还有一个我不明白的解决方案.如果有人能够理解它,请帮我解释一下.任何其他解决方案将不胜感激.
我对这个问题的第一个想法是将机器人编程为随机选择首先向右或向左,然后做出类似指数搜索的东西:首先向右移动2个位置,然后向左移动4个等等.如果在其中一个"行程"在机器人右侧或左侧找到第二个降落伞(另一个机器人使用的降落伞),机器人只会朝那个方向搜索.这有意义吗?
非常感谢你!
小智 20
我的程序实际上更短,并且也像魅力一样:
start: left
skipNext
goto start
next: left
goto next
这是有效的,因为第二个循环比第一个循环快.
你可以在这里测试你的程序:http://david-peter.de/parachuting-robots/
ldg*_*bay 11
您的"初步想法"解决方案也应该起作用,但机器人需要的时间比您在wikibooks上引用的解决方案要长一些.回顾一下,wikibooks的解决方案是:
如果你不认识语法,作者试图模仿BASIC,其中数字10-60是行号,而GOTO是代码跳转.
10-40行有两个机器人向右缓慢移动."右,左,右"步骤减慢向右移动.它可以很容易地"正确,等待".第40行检查降落伞.当两个机器人落在线上时,其中一个机器人就在另一个机器人的左侧.左机器人最终将找到另一个降落伞.权利永远不会.当左侧机器人找到合适的机器人的降落伞时,它进入50-60行,在那里它向右移动而没有减速.现在左侧机器人的移动速度比右侧机器人快,左侧机器人最终会赶上.
我个人认为你提出的算法更有趣,因为两个机器人会来回摆动很多.在某种程度上,它是一种类似的算法,但减速随着每一步线性增长.