游戏
最近,我的大部分时间都花在了手机上的一个令人上瘾的游戏中,名为Logic Dots,这激发了我编写这一挑战的灵感。如果我向您展示游戏画面,则更容易解释这些规则,因此以下是未解决且已解决的难题的屏幕截图:
现在,这里要注意三件事。
- 游戏板(中心的4x4正方形网格)
- 所需的形状(从顶部开始,在第二个栏中的链接点,在乐谱和菜单下等)均为全线,或者
a
由1个矩形组成 - 行和列上的数字,表示解决方案中列中需要多少个点
游戏的目的是使所需的形状适合网格。您可以旋转形状,但不能斜入。
在解决方案中,请注意,所有形状仅创建一次(因为它们仅在所需的形状中创建一次),在这种情况下,它们都是水平的,但也可以是垂直的。正方形中的粉红色表示未使用的正方形。
这是一个更大,稍微更复杂的网格:
请注意,在未解决的难题中,已经有一些正方形填满。灰色的正方形表示您不能在其上放置点的被遮盖的正方形。带有尾巴的点告诉您该点处有一个点,并且它在尾巴的方向上链接了至少一个点,但在任何其他方向(包括相反的方向)上都没有链接。
符号
对于本文的其余部分,我将使用以下符号来指代董事会:
- <,>,^,v-表示一个预先放置的点,其尾部沿点的方向延伸
- *-表示一个点。如果在未解决的网格(输入)上给出,则它是单个形状。如果是输出,则将其连接到其周围的点。
- #-表示被遮挡的网格正方形(您不能在其中放置点)
- -,| (连字符和横线)-分别表示一个带有左右尾巴的点和一个带有上下尾巴的点
- **(空格字符)-**表示空白
使用这些符号,后一种示例情况(未解决)可以表示为:
<
#
^ #
解决方案可以表示为:
*< * *
*
*
* *
* *#*
^ # *
请注意,没有两个形状可以水平,垂直或对角线接触,因此以下情况无效:
***
**
**
挑战
您面临的挑战是解决从4x4到9x9的所有逻辑点难题。您将收到四行输入,然后是游戏板。这些行将如下所示:
- 第一行,形状-要查找的形状,每个形状均以表格形式给出
sizexquantity
(例如,3x2
对于长度为三的两个形状),并以空格分隔。示例行:3x1 2x1 1x1
- 第二行,列-每列所需的点数的空格分隔列表。示例行:
1 1 2 2
- 第三行,行-每行所需的点数的空格分隔列表。示例行:
3 0 3 0
- 第4行,电路板尺寸-一个整数,电路板尺寸,
B
然后给出该板,并且是B
使用上述符号表示板的输入线。例如,后一种示例情况的完整输入如下:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
然后,您的程序将以相同的符号输出已求解的板。上述输入的匹配输出如下:
** * *
*
*
* *
* *#*
* # *
请注意,游戏板可以具有多种解决方案。在这种情况下,只需输出一个有效的解决方案。此外,对于复杂的10x10网格,您的程序必须在合理的台式计算机上10秒钟内输出正确的解决方案。
这是代码高尔夫,因此最少字节获胜。
测试用例
输入1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
输出1
*** *
***#
#
* * *
输入2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
输出2
* * *
*
* *
* #
* *
输入3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
输出3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(这应该是开头,几乎不会在结尾处丢失,但是无论如何……)