此挑战基于以下难题:给您一个n
by n
网格,其中带有n
标记的单元格。您的工作是将网格划分为多个n
部分,其中每个部分均由精确的n
单元格组成,每个单元格仅包含一个标记的单元格。
例
这是左边的难题,右边是其(唯一)解决方案:
挑战
您会n
以任何合理的格式获得一组零索引的坐标。
[(0,0), (0,3), (1,0), (1,1), (2,2)]
您的工作是编写一个返回任何有效分区(同样,以任何合理的格式)的程序。
[
[(0,0), (0,1), (0,2), (1,2), (1,3)],
[(0,3), (0,4), (1,4), (2,4), (3,4)],
[(1,0), (2,0), (3,0), (4,0), (4,1)],
[(1,1), (2,1), (3,1), (3,2), (4,2)],
[(2,2), (2,3), (3,3), (4,3), (4,4)]
]
如果难题没有解决方案,程序应通过抛出错误或返回空解决方案来表明这一点。
输入/输出示例
[(0,0)] => [[(0,0)]]
[(0,0), (1,1)] => [
[(0,0), (1,0)],
[(0,1), (1,1)]
]
[(0,0), (0,1), (1,0)] => [] (no solution)
[(0,0), (0,1), (0,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (1,1), (2,1)],
[(0,2), (1,2), (2,2)],
]
[(0,0), (0,2), (1,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (0,2), (1,1)],
[(1,2), (2,1), (2,2)],
]
计分
这是代码高尔夫球,因此最短的代码获胜。
这是受此数学堆栈交换问题的启发。
—
Peter Kagey
@Arnauld,对于Shikaku拼图来说,“目标是将网格划分为矩形和正方形”。在这种情况下,没有这种约束。
—
彼得·卡吉
对困惑感到抱歉。我认为沙盒中的某个地方可能会有Shikaku挑战,或者也许我正计划在某个时候让自己成为一个我-我不记得了。无论哪种方式,我乍一看都认为是同一回事。
—
Arnauld,
为什么结果是二维坐标数组?我不明白那里表达的是什么……难道它不是数组索引的二维数组吗?例如,第3行第2列包含索引为4的分区。
—
奥利维尔·格雷戈尔(OlivierGrégoire),
如示例所示,我们是否可以假定可以从参考坐标开始绘制每个区域?我刚刚意识到,我已经在不知不觉中将其视为理所当然。
—
Arnauld