2
水暖随机路径
编写一个包含三个整数,宽度w,高度h和步数的程序或函数s。您将在一个按像素图像上绘制很长的非自相交随机 s步长,其中每5 x 5像素单元为空(纯米色)或以下十二个简单“管道”之一:5*w5*h 上面的图像被放大以显示细节。这是实际尺寸的管道: (灰色线仅用于分隔管道类型。) 随机游走将是一条连续的管道路径,该路径从一个管道端点(底部四种管道类型之一)开始,到另一个管道端点结束。 从一个空w的h网格开始,并随机选择一个单元格作为起点。然后随机选择四个方向之一以开始并绘制相应的管道端点。这个开始的单元格标志着您步行的第一步,每当您绘制一个新的单元格或覆盖一个现有的单元格时,它便被视为采取的另一步骤。 现在,如果选择的方向有效,则反复地随机选择向右,向左或向右走,绘制适当的管单元。回溯并重新选择方向,直到s形成完整的步阶路径才有效。该路径应以管道端点结尾,该端点可以在网格上的任何位置,具体取决于路径所采用的路线。 重要的是要注意,只有两个直管单元可以被覆盖,并且只能被方向相反的直管单元覆盖,结果是相交单元。否则,必须将所有管道放置在空的单元格中。 绘制相交时,应将路径中距起始像元更远的部分绘制在顶部。 由您决定网格是否具有周期性边界条件(PBC),即,从网格一侧退出的管道是否会从另一侧伸出。如果没有PBC,则网格边界会像其他管道一样成为障碍。 特别案例 当s为0时,不应绘制任何管道,并且输出5*w的5*h图像应为空白(即所有米色)。 当s为1时,单个管道存根 (实际尺寸:) 应该在随机选择的起始单元格上绘制。 其他详情 您可能会认为这s是最多的,w*h因此一条路径永远是可能的。(尽管由于相交,可能会有更长的路径。) w并且h将始终是积极的。 所有随机选择都必须一致地随机。例如,即使这样会使问题变得更容易,您也不应避免在可能的情况下进行交叉。允许使用伪随机数生成器。 可以使用任何三种视觉上不同的颜色来代替黑色,蓝色和米色。 您的输出图像可能会被放大,以使它们实际上是5*w*k按5*h*k像素(其中k为正整数)表示的。(即使您k是1,也建议您放大发布的所有示例。) 可以使用任何常见的无损图像文件格式,并且可以将图像保存到文件,显示或原始输出到stdout。 以字节为单位的最短代码获胜。 例子 (全部放大了500%。) 如果输入为,w=2, h=1, s=0则输出将始终为: 如果输入是,w=2, h=1, s=1则输出将是这些图像之一,机会均等: 如果输入为,w=2, h=1, s=2则输出为 或可能 如果假定网格具有PBC。 (请注意,像这样开始路径将使第二步变得不可能。) 以下是w=3, h=2, s=6假设PBC的一些可能的输出: w=3, h=3, s=9假设PBC,这是的可能输出: 请注意,由于相交计算为两个步骤,因此路径不需要覆盖所有像元。同样,我们可以推断出拐角端点是起始像元,因为必须在之后绘制交叉点立交桥。因此,我们可以推断出做出的随机选择的顺序: start at top left, …