介绍
有一个收税员在管理其王国的税收时遇到了一些麻烦:历史记录已在大火中燃烧。
他想找出从现有资金继承的角度来看可能有多少过去。幸运的是,他的王国很简单。
王国可以用2D布尔矩阵建模,其中l
代表已继承货币的O
人,而未继承货币的人。例如:
l O l l
O O O l
l O l O
O O O l
(它将始终是一个矩形)
在下一代中,王国变小了(狼很强!)。
下一代看起来像这样,叠加在上一代上(x
是下一代后代的占位符)
l O l l
x x x
O O O l
x x x
l O l O
x x x
O O O l
后代将着眼于那些直接身边的祖先(所以左上角x
会看到{ l
,O
,O
,O
},称为未对齐的矩形街区)
如果只有一位祖先继承了金钱,则后代将从他们那里继承金钱。如果一个以上的祖先继承了金钱,他们将争吵不休,后代最终将不会继承金钱。如果没有人继承金钱,则后代将不会继承任何金钱。
(一个以上的后代可以从一个祖先继承)
因此,下一代看起来像:
l l O
l l O
l l O
挑战
输入项
世代的当前状态,为任何两个不同值的数组的数组,其中内部数组的长度均相同。
例如,对于上面的示例,可能是:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
输出量
一个整数,表示唯一的前几代,其中下一代是输入。
您可以假定答案将始终小于2 ^ 30-1(或1073741823)。
上一代将被称为“原像”,而这一挑战将是计算原像。
计分
这是一个 最快的代码 挑战,因此每个提交都将在我的计算机上进行测试,并且花费最少时间的提交将成为赢家。
输入和输出示例
(那里1
是继承金钱0
的后代,而不是继承金钱的后代)
输入:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
输出:
4
输入:
[[1, 0, 1, 0, 0, 1, 1, 1],
[1, 0, 1, 0, 0, 0, 1, 0],
[1, 1, 1, 0, 0, 0, 1, 0],
[1, 0, 1, 0, 0, 0, 1, 0],
[1, 0, 1, 0, 0, 1, 1, 1]]
输出:
254
输入:
[[1, 1, 0, 1, 0, 1, 0, 1, 1, 0],
[1, 1, 0, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 1, 1, 0, 0]]
输出:
11567