描述性关键字(用于搜索):使两个矩阵等效,重叠,数组,查找
挑战
圣诞老人在过去曾有过精灵从他的保险库中偷走礼物的历史,因此,今年他设计了一把很难破解的锁,今年似乎将精灵拒之门外。不幸的是,他丢失了组合,也无法弄清楚如何打开它!幸运的是,他雇用了您编写一个程序来查找该组合。它不需要是最短的,但他需要尽快找到它!
他的日程安排非常严格,他等不起。您的分数将是程序的总运行时间乘以程序为得分输入所输出的步数。最低分获胜。
技术指标
锁是1和0的方阵。它设置为1和0的随机排列,并且需要设置为指定的代码。幸运的是,圣诞老人记住了所需的代码。
他可以执行几个步骤。每个步骤都可以在任何连续的子矩阵上执行(也就是说,您必须选择一个完全由左上角和右下角所包围的子矩阵)(可以是非正方形子矩阵):
- 向右旋转90度*
- 向左旋转90度*
- 旋转180度
- 左右循环各行
n
元素(环绕) - 循环上移
m
或下移每个列元素(自动换行) - 水平翻转
- 垂直翻转
- 翻转主对角线*
- 翻转主反对角线*
*仅当子矩阵为正方形时
当然,他也可以在整个矩阵上执行这些步骤。由于1和0只能在矩阵上交换,而正方形的值不能直接更改,因此开始和结束配置的1和0的数目相同。
格式规范和规则
将以您想要的任何合理格式为您提供两个平方矩阵的输入(开始位置和结束位置)。输出应该是任何可读格式的这些步骤的序列。由于这不是代码来源,请使其成为易于验证的格式,但这不是严格的要求。如果需要,可以选择在输入中采用矩阵的边长。
您的程序将在我的计算机上运行(Linux Mint,如果需要的话,您可以根据要求提供确切的版本详细信息:P),并且我将根据我在命令行上按“ Enter”键之间的时间以及命令退出。
测试用例
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- 取整个矩阵。循环上每一列1。
- 将中间两列作为子矩阵。将每列向下循环2。
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- 取整个矩阵。将每列向下循环1。
- 取中间一列。循环下来2。
- 采取前2行。垂直翻转。
- 采取最上面一行的最右边的2个元素。交换它们(左右旋转1,水平翻转)。
- 取第一行最左边的2个元素。交换他们。
可能有更有效的方法,但这无关紧要。如果发现有问题,请随时在评论中指出:)
判断测试用例
该测试用例将用于判断您的提交。如果我认为答案过多地适用于测试用例,那么我有权取消随机输入,并用新案例重新判断所有答案。在这里可以找到测试用例,其中顶部是起点,底部是所需的配置。
如果我认为答案过于专业,那么下一个测试用例的MD5为3c1007ebd4ea7f0a2a1f0254af204eed
。(这是现在写在这里,以使自己摆脱指控作弊:P)
适用标准漏洞。没有答案将被接受。编码愉快!
注意:我从Advent Of Code汲取灵感来挑战这个系列。我没有与此网站的隶属关系
通过在此处查看第一个挑战的“链接”部分,可以查看该系列中所有挑战的列表。
0
和641
,并且总共有256 choose 64 ≈ 1.9 × 10⁶¹
可及的矩阵。(与Megaminx相当,并且比Rubik's Revenge大,尽管比Professor's cube