您将得到一个二维数组和一个数字,并要求您确定给定的矩阵是否为托普利茨。一个矩阵是一个Toeplitz矩阵,如果每个从左到右的下降对角线只有一个不同的元素。也就是说,它的形式应该是:
您将得到一个函数,它将以two-dimensional矩阵作为参数。
如果矩阵是Toeplitz,则从函数返回1,否则返回-1。
3 < n,m < 10,000,000其中n是行数,而m是列数。
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1 这是密码-高尔夫,所以以字节为单位的最短答案获胜。
发布于 2017-05-18 11:24:50
2Boole[#==ToeplitzMatrix[#&@@@#,#&@@#]]-1&Mathematica没有内建物来检查某样东西是否是Toeplitz矩阵,但是它有一个内建物来生成一个。因此,我们从输入的第一列(#&@@@#)和第一行(#&@@#)生成一个,并检查它是否等于输入。要将True/False结果转换为1/-1,我们使用Boole (给出1或0),然后简单地用2x-1转换结果。
发布于 2017-05-18 06:54:11
我假设我不必像挑战中所说的那样处理1,000,000,000,000矩阵。这适用于不超过可用内存的矩阵(在我的例子中小于1TB)。
@(x)x==toeplitz(x(:,1),x(1,:))这将以一个矩阵x作为输入,并根据第一列和第一行的值创建一个Toeplitz矩阵。然后,它将检查矩阵中的每个元素是否相等。如果所有元素相等,则输入为Toeplitz矩阵。
输出将是与输入相同维度的矩阵。如果输出中有零,那就被认为是假的。
刚刚注意到严格的输出格式:
这可以工作41个字节。也许可以从这个版本中去掉一两个字节,但我希望输出规则能够放松一点。
@(x)2*(0||(x==toeplitz(x(:,1),x(1,:))))-1https://codegolf.stackexchange.com/questions/121320
复制相似问题