Questions tagged «path-finding»

几何或图形理论中的问题,涉及受约束(障碍)影响的最佳路径(例如最短路径)。

2
帮助我们的机器人到达传送器
更新:添加了一个Python框架来开始。 太空站已经被破碎机器人取代。在站点自毁之前,您必须将许多昂贵且易碎的被称为“兔子”的高科技机器人引导到出口传送带,但是破碎机器人正在走廊上巡逻。 您的程序将获得一个ASCII映射,并且每转都会告诉破碎机器人在哪里以及您当前的兔子在哪里。然后,您的程序应将兔子移向出口传送带,同时避开破碎机器人。 执行 使用以下命令运行Python 2控制器: python controller.py <mapfile> <turns> <seed> <runs> <prog>... <prog> can be <interpreter> <yourprog> or similar. 种子是用于破碎机和程序PRNG的小整数,因此运行是可重复的。不管实际使用的种子如何,您的程序都应一致地执行。如果种子为零,则控制器将为每次运行使用随机种子。 控制器将使用地图文本文件的名称和种子作为参数来运行您的程序。例如: perl wandomwabbits.pl large.map 322 如果您的程序使用PRNG,则应使用给定的种子对其进行初始化。然后,控制器通过STDIN发送程序更新,并通过STDOUT读取兔子的运动。 控制器每转一圈将输出3行: turnsleft <INT> crusher <x,y> <movesto|crushes> <x,y>; ... rabbits <x,y> <x,y> ... 然后等待程序输出一行: move <x,y> to <x,y>; ... 更新:在控制器发送第一行之前,您的程序将有2秒钟的初始化时间。 如果您的程序在输入控制器兔子位置后花了0.5秒以上的时间来响应移动,则控制器将退出。 如果网格上没有兔子,则Rabbits行将没有值,并且您的程序应输出一条裸露的“ move”字符串行。 请记住,每转一圈都要刷新程序输出流,否则控制器可能会挂起。 …

2
Snakepit的食物短缺
Snakepit的食物短缺 蛇窝是35年以来的第一次,粮食已经耗尽。现在,居住的蛇必须互相搏斗,以度过这种粮食短缺的状况。食物链的顶端只能有一条蛇! 排行榜 还没来 2月24日的最新更新 链接到最近比赛的可视化 描述 如果您想争取剩下的所有苹果/樱桃/其他东西,则必须以程序的形式提供一条蛇,该蛇可以接受给定的输入并返回下一步。 唯一的转折是您并不孤单。另一条蛇也会尝试获得稀有食物!但是蛇形洞内部很暗,所以您只能看到自己和苹果。撞到对手会导致您死亡,就像咬自己或撞墙一样。此外,由于这些天苹果很少见,如果对手的进食量足以达到7岁,您就会饿死。 蛇形坑是一个二维地图,宽度和高度为15,而最外面的砖块则筑起了不可逾越的墙: 0 1 2 . . . c d e 0 # # # # # # # # # 1 # # 2 # x # . # # . # # . # # c # # d # …

16
最小加权RoD路径的权重
令其为正整数A的mby n矩形矩阵,其中和也是正整数。mn 我们对从左上单元格A到右下单元格的RoD(“右或下”)路径感兴趣;在RoD路径中,该路径的每个连续单元都是前一个单元向右的一个单元或下一个单元。 给定任何这样的RoD路径,我们可以取该路径中的单元格之和A。 例如,考虑4 x 3矩阵: [ [1, 2, 3, 4], [5, 1, 6, 7], [8, 2, 1, 1] ] 然后我们可以考虑RoD路径: 1 > 2 3 4 v 5 1 6 7 v 8 2 > 1 > 1 的总和为1+2+1+2+1+1=8。值得注意的是,该路径在该矩阵中从左上到右下的所有可能RoD路径的总和最小。 因此,提出的挑战是在您选择的语言中提供最短的功能/程序,以输出给定矩阵中从左上到右下的RoD路径可以具有的最小和A。 通常禁止的漏洞生效。您的输入可以采用任何合理的格式;您的输出必须是整数。 这是代码高尔夫球;答案按字节数计分。 测试用例 [ [5] ] -> 5 [ …

1
帮助开发Alphys最新拼图!
地下皇家科学家Alphys已经完成了一个新拼图的原型。但是,她似乎找不到任何愿意测试的人。 她的困惑规则如下: 目标是从左侧最中心的图块开始,到达右侧。对于高度为偶数的拼图,请从两个中心磁贴中的较低者开始。(示例:在索引为零的4x4数组中,起始位置为[2,0]-第2行,第0列。在索引为零的5x5数组中,起始位置为[2,0]-第2行,第2列0.) 每个彩色图块都有自己的“ adsistic”功能: 粉色和绿色磁贴(分别表示为“ P”和“ G”)没有任何作用 红色和黄色的磁贴(“ R”,“ Y”)不可逾越。 橙色方块(“ O”)使玩家闻起来像橙色 紫色瓷砖(“ U”)会迫使玩家朝他们面对的方向移动到下一个瓷砖,并使它们闻起来像柠檬 蓝色瓷砖(“B”),只要播放器是通行不闻起来像橘子。 为了阐明风味机制,玩家的气味将无限期地持续,或者直到被不同气味的瓷砖所覆盖为止,即,如果玩家踩到橙色瓷砖上,他们会闻起来像橙色,直到他们踩到紫色瓷砖上为止。 另外,与蓝色瓷砖垂直或水平放置的黄色瓷砖也会导致蓝色瓷砖无法通行。 您的任务是编写一个程序或函数,该程序或函数接受表示拼图布局的二维字符数组(或一维字符串数组,或其他有效格式)作为输入,并输出原始拼图和已解决的拼图,并带有星号或某些其他字符显示正确的路径。假设给定的难题是可以解决的。 以这个难题为例: BGYBG PGPBG PUBPB OUGYB PPOPP 您的程序将输出: BGYBG PGPBG PUBPB OUGYB PPOPP BGYBG PGPBG ***** OUGYB PPOPP 必须使用this生成使用的任何拼图。 适用标准代码高尔夫规则。最佳答案将是每种语言的最短答案。答案必须包含语言,字节数和三个测试用例。前两个可以是您选择的任何布局,但第三个必须是: RRRR RPPR PUOR RPBP

2
鸡是怎么过马路的?
咯咯咯咯咯咯。没有人知道为什么鸡肉过马路,也许另一边有一只漂亮的公鸡。但是我们可以弄清楚如何做。编写一个程序,从左到右,穿过这个(或任何)“道路”。 1356 | 1738 3822 | 1424 3527 3718 9809 | 5926 0261 | 1947 7188 4717 6624 | 9836 4055 | 9164 2636 4927 5926 | 1964 3144 | 8254 您的程序“越过”它,从左到右移动。您可以从最喜欢的列的任何数字开始。从那里,您可以移动到右侧的任何相邻字符。如果从左上角的1​​开始,则可以转到3或8。将转到的每个数字(包括起始数字)都添加到总和中。空格不会增加您的总和。“ |” 迫使您向上或向下移动,而不是向右移动。(您不能在这个角色上前进)您的目标是以最小的总和到达对方。您的程序必须在最后打印出总和,并且它必须能够解决任何问题。最好也可以有一条道路的输入,但这不是必需的。您的程序必须同时打印路径和总和。最少的代码字节获胜。 为了清楚起见,除非在垂直条上,否则可以沿对角线移动。当您在垂直栏上时,只能上下移动。 为了更清晰地说明道路,基本上是一串遵循字符规则的文本字符串(或者是列或行的数组,您应该更喜欢这样考虑),但是这些字符中没有任何内容马路。可以有任何数字,空格,竖线(“ |”)或换行符。如果像一条醉汉那样铺了一条路,就像ProgrammerDan的回答一样,那条路仍然是有效的,您的程序必须能够解决这条路。如果无法到达另一侧,则不认为这条路是可行的(例如,没有任何一条路可以走出一条直线)。 您的程序无需确定道路是否无效。 密钥: 任意数字-将数字加到您的总和中,继续前进。 空格-继续前进,您的总和不会增加任何东西。 “ |” -向上或向下移动,您的总和没有增加。 编辑:建议的示例解决方案。我不能做一个非常大的东西,我不能上IDE来为我的ATM解决它。 走这条小路: 9191 | 8282 1919 …

9
门户迷宫最短路径
您的目标是编写一个程序,使用0,1和创建一个随机的10x10映射,并2假定从左上到右下的最短路径: 0代表草地:任何人都可以在上面行走; 1代表一堵墙:您不能穿过它; 2代表门户:输入门户时,您可以移至地图中的任何其他门户。 眼镜: 左上角元素和右下角元素必须为0; 创建随机映射时,每个字段应有60%的机会成为0; 30%的机会成为1; 10%的机会成为2; 您可以在任何相邻字段(甚至对角线字段)中移动; 您的程序应输出地图和最短路径的步数; 如果没有通向右下字段的有效路径,则您的程序应仅输出地图; 您可以使用任何您想使用的资源; 最短的代码获胜。 计算步骤: 步骤是实际运动;每次更改字段时,都会增加计数器。 输出: 0000100200 0100100010 1000000111 0002001000 1111100020 0001111111 0001001000 0020001111 1100110000 0000020100 9

1
卡坦定居者-最长之路!
这是卡坦定居者的残局: 背景: 道路(长棍棒)和居民点(和城市)由小木屋组成。我们使用以下方案对这些片段的放置进行编码:从顶部开始,我们有一排水平顶点和一条可以放置道路的边。然后,我们只有一列道路,依此类推。使用R代表红色,O代表橙色,B代表蓝色,_代表无,图板将被编码为: ________RR_R_ __R_ __RR_R_RRR_____R_ B___R _B_________B__OO_OOR_ B__B_R BB_BBB_____B____RR_R_ OBB_O OO__BB_BB__OOO_OO O_O_ _O_OOO_O_____ 这样的板将作为您的输入字符串。任何字母都[A-Z]可以指示玩家的颜色,但是最多可以有四种颜色(包括空白)。否则,根据定居者规则,保证董事会有效,这意味着: 每种颜色最多具有两个连续的道路网络,这些道路网络可能会或可能不会被其他玩家居住区/城市(顶点建筑物)分开。看到橙色沉淀物将样品图像右侧的红色道路分开。 保证每个路网至少有一个居民点。 保证所有定居点和城市与最近的其他定居点/城市(您或其他人)至少有两个边缘 一位玩家在游戏板上可能只有15条道路。 对于Catan爱好者:出于此问题的目的,在定居点和城市之间没有区别,因此我在输入字符串中没有区别。 所有这些都是为了指定“输入”字符串。 最长的路: 在定居者中,玩家拥有“最长的道路”可获得两个胜利点。定义为:从起点到终点的最长连续单路径(以道路为单位),不会被对手的定居点或城市分解。只要您可以跟踪从一个特定起点到一个特定终点的路径,循环就可以了。因此,一条6条道路的环路加上一条分支的道路的长度为7,但是一条在两条道路上相对的6条道路分支的两条分支的长度仍为7。 在示例地图中,右侧的红色道路仅价值4,因为板子右侧的橙色解决方案将他切断了(这就是为什么完全包括解决方案的原因)。蓝色的道路长度为13,橙色的道路长度为12。红色的最高道路仅价值7,因为它没有连接到其旁边的两条道路。 输出: 道路最长的所有玩家(如果有平局,则可能会超过一条),然后以空格和/或下划线划定距离(以10为底)。 因此,示例板的输出为: B 13 问题陈述: 您可以编写程序或函数,通过STDIN或作为函数的字符串参数接收输入板,然后将上述输出作为字符串返回或将其打印到STDOUT(或最接近的输出)。您可以选择在输出中包含单个尾随换行符。 这是代码高尔夫球,最短的程序获胜。当然,标准漏洞是被禁止的。

5
狼和鸡
有一条河,河的一侧有狼和鸡。他们有木筏,都需要走到另一边。但是,木筏不能自行行驶。如果上面有两只以上的动物,木筏将沉没。没有动物要弄湿,因为这条河又冷又脏。没有动物可以在河上跳跃或飞行。同样,如果一侧有鸡,那一侧的狼就不会多于那一侧的鸡,然后狼会决定吃掉这些鸡。这意味着您不能将两只狼和一只鸡放在木筏上。 您的任务是制作一个程序/函数,将多头狼和多只鸡(大于或等于多头狼)作为输入,并找出木筏在河上移动的最少次数。如果无法完成任务,则程序/功能应输出/返回空字符串。然后它将以以下方式打印/返回一种有关如何完成此操作的方法: W if a wolf crosses the river on its own C if a chicken crosses the river on its own CW if a chicken and a wolf cross the river -- WC is also fine CC if two chickens cross the river WW if two wolves cross the …

4
除数图中的最短路径
介绍 在这个挑战中,我们将处理某个无限的无向图,我将其称为高除数图。其节点是从2开始有两个节点之间的边缘的整数A <B ,如果一个分割b和一个2 ≥b 。由2到18范围组成的子图如下所示: 16-8 12 18 \|/ |/| 4 6 9 10 15 14 | |/ |/ | 2 3 5 7 11 13 17 可以证明无限高的除数图是连通的,因此我们可以询问两个节点之间的最短路径。 输入输出 您的输入是两个整数a和b。您可以假定2≤a≤b <1000。您的输出是无限高除数图中a和b之间的最短路径的长度。这意味着路径中的边数。 您可能会发现以下事实很有用:始终存在从a到b的最佳路径,该路径先增大然后减小,并且仅访问严格小于2b 2的节点。特别地,由于b <1000,您只需要考虑小于2000000的节点。 例子 考虑输入3和32。节点3和32之间的一条可能路径是 3 -- 6 -- 12 -- 96 -- 32 该路径有四个边,结果没有较短的路径,因此正确的输出是4。 作为另一示例,用于最佳路径2和25是 2 -- …

2
我如何在生活中获得更多的Klotski?
我真的很喜欢滑动拼图,但是最近,我没有时间去做。因此,我需要一个程序来解决滑动砖块难题,特别是Klotski难题。 您的输入将采用以下格式: ####### #001gg# ##.222# .###### 其中#代表墙壁,.代表开放区域,g代表目标,相邻数字代表不同的方块。您可以假设: 不会超过10个街区 不会有两个号码相同的方块 所有街区将被围墙包围 网格是矩形 该0块是大到足以覆盖所有的目标方格。 有一个有效的解决方案 您需要返回一系列移动步骤,以放置0方块,使其覆盖所有目标方格。方块不能穿过墙壁或其他方块。对于上述难题,适当的顺序是 2L,1R,1R,1D,0R,0R,0R while代表将2方块向左移动1方块,1方块向右移动2方块(在球门顶部),然后向下移动1方块,再0向右移动3方块。 实际上,有几个序列可以解决上述问题,并且产生其中的任何一个都是可以接受的。您的解决方案应该是最佳的,这意味着它应该产生一个序列,以尽可能少的步骤解决难题。 序列应如上打印,但可以用逗号,换行符或空格分隔。我不在乎是否有逗号或空格。您应该在合理的时间内产生输出(在以下难题中最长为120秒)。 难题1: ..####.. ..#00#.. ###00### #......# #.1122.# ##3124## .#3344#. .##55##. ..#gg#.. ..####.. 难题2: ###### #1002# #1002# #3445# #3675# #8gg9# ###### 难题3: .####. ##1g## #22g3# #4255# #4.56# #.006# #7008# ###### 难题4: .####. ##00## #.00g# …

3
弥合差距
给定具有白色背景和一组黑点的黑白图像,将一组白色像素绘制为红色,以便每对黑色像素之间都有一条路径。 细节 路径是一组连接的像素(8邻域连通性)。黑色像素可以用作路径的一部分。目标是在上述条件下尽量减少红色像素的集合,并输出相应的图像。 你不必须找到最佳的解决方案。 一个平凡而又最糟糕的解决方案就是将所有白色像素都涂成红色。 示例(为可视性将像素放大): 细节 给定一个像素图像(采用任何合适的格式),则返回另一个图像,该图像具有如上所述连接的点以及一个整数,该整数指示使用了多少个红色像素。 分数是14个测试用例的每一个的乘积((1 +红色像素的数量))。 目标是得分最低。 测试用例 14个测试用例如下所示。可以在此处找到用于验证输出连接性的python程序。 元 感谢@ Veskah,@ Fatalize,@ wizzwizz4和@trichoplax的各种建议。

3
多级免费停车位查找器
与孩子相关的介绍 每当我带孩子去游乐园时,我们离公园越近,孩子们就会变得越紧张,当我们在停车场而找不到停车位时,就会感到神经紧张。因此,我决定我需要一种方法来找到最近的免费停车位,以最大程度地减少停车时间。 技术介绍 想象一下这样的停车场的示意图: ***************** * * * ··CC··C··CC·· * * ************* * * ··CCCCCCCCC·· * * * **********E****** 在此表示中,是*指墙壁,·免费停车位,E入口和C已经停放的汽车。每个空白处都是要停放的汽车可用于在停车场周围移动的位置。现在让我们将此概念扩展到3D以创建多层停车场: 1st floor 2nd floor 3rd floor 4th floor ***************** ***************** ***************** ***************** * 1 * 2 * 3 * * * CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * …

1
旧金山的出租车
您是旧金山的出租车司机。正如出租车司机的典型做法一样,您正在浏览一个网格,在该网格中,您只能移动的有效方向是左,右,上和下。但是,圣弗朗西斯科(San Fransisco)非常丘陵,因此两个相邻交叉路口之间的距离不一定相同。更具体地,在海拔处的交叉点与在海拔处a的相邻交叉点之间的距离b将是1 + |a - b|。您的目标是找到从地图左上角的起点到右下角的目的地的所有最短路径。 输入值 整数高度的二维网格,采用最方便的格式(二维数组,具有宽度和/或高度的一维数组等)。 输出量 方向行进的顺序以给定的距离,高度的两个相邻交叉点之间的距离留在最短的距离可能顶部的输入的右下角到达a和b由下式给定1 + |a - b|。如果有多个解决方案,请输出所有解决方案。 虽然我使用U,D,L,和R为上,下,左,右在你的程序可以使用任何四个不同的字符串来表示的方向上,只要它是与他们一致,并在所有输入下面的例子。 例子 Input: 0 3 0 0 0 0 2 0 2 0 0 0 0 3 0 Output: D D R R U U R R D D Input: 3 Output: <empty> Input: 11 11 …

1
跳棋:国王吗?
挑战: 给定棋盘格,如果可能的话,输出将花费最少的移动量(假设黑色根本不移动)为红色棋子。 规则: 红色的一面总是在底部,但是它们的碎片可以从任何行开始(甚至需要到达国王的行)。黑色棋子是静止的,这意味着它们不会在红色棋子之间移动,而在捕获时会从棋盘上移开。请注意,片段可以在板上的任何空间开始,包括彼此相邻。这不是播放普通跳棋的方式,但是您的程序必须能够解决这些问题。(请参阅输入5)但是,方格件只能对角移动(请参阅输入3)。如果第一个捕获在链中是向前的,则允许向后捕获(请参见输入7)。 输入: 一个8x8的棋盘格,其棋盘空间定义为以下字符(只要它们是一致的,可以随意使用替代项): 。-空 R-红色件 B-黑色件 输出: 的最小的移动号码,将采取一个红色片是“kinged”通过输入在板(黑侧)的顶行王的行,0如果不需要移动(开始红色片上王的行),或如果不可能加红色,则为负数(即黑色占据整个第一行)。 输入1: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . …

3
二维平面上的最长路径
为您提供了一组任意的,任意的2d整数笛卡尔坐标:例如[[(0,0),(0,1),(1,0)] 从这组坐标中找到可能的最长路径,并限制只能“访问”一次坐标。(而且您不会“回到”开始时的坐标)。 重要: 您不能“越过”坐标或其周围。例如,在最后一个音符示例(矩形)中,您不能不访问C就从D移到A (这可能是重新访问,从而使找到的长度无效)。@FryAmTheEggman指出了这一点。 函数输入:二维笛卡尔坐标数组 函数输出:仅最大长度 获胜者: 最短代码获胜,没有保留被禁止(不是时空效率最高的) 例子 1:在上面所示的情况下,没有两次“访问”坐标的最长路径是A-> B-> O(或OBA或BAO),并且路径长度是sqrt(2)+ 1 = 2.414 2:在上述情况下,两次没有坐标“访问”的最长路径是ABOC(显然是COBA,OCAB等),对于所示的单位平方,它计算为sqrt(2)+ sqrt(2)+ 1 = 3.828。 注意:这是一个额外的测试用例,它不如前两个示例那么简单。这是由6个坐标组成的矩形: 在这里,最长的路径是:A-> E-> C-> O-> D-> B,即8.7147 (最大可能的对角线走过且没有横越任何边)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.