任务
给定输入N,生成并输出一个NxN网格,其中每一行,每一列和两个对角线都包含数字1到N
(或0到N
-1,如果更容易)。
输入项
输入是一个正整数N
。它代表网格中的列数和行数。对于这个问题,您可以假设N
将是一个合理的大小,4 ≤ N ≤ 8
或者(1 ≤ N ≤ 8
如果您获得以下红利)。
输出量
输出将是N
× N
网格。在网格中,每一行仅包含数字1到N
,每列仅包含数字1到N
,长度的两个对角线N
(一个从(0,0)
to (N-1,N-1)
到一个从(0,N-1)
to到(N-1, 0)
)仅包含数字1到N
。您可以使用数字0到N−1
。对于每种N
,都有许多可能的解决方案,您只需要打印找到的第一个即可。您无需在数字之间打印空格。
约束条件
您的代码应能够重复产生的结果N >= 7
。也就是说,如果您N = 7
每次都能实际运行并从代码中获取解决方案,那么您就很好。就绝对限制而言,您的代码N = 7
每次运行都应能够在10分钟内解决(即,如果您依赖随机数,则在最坏的情况下,您的代码仍应在10分钟内完成N = 7
) 。
例子
输入:
4
一种可能的输出:
1 2 3 4 3 4 1 2 4 3 2 1 2 1 4 3
输入:
5
一种可能的输出:
1 2 3 4 5 5 3 1 2 4 2 5 4 3 1 4 1 2 5 3 3 4 5 1 2
输入:
8
一种可能的输出:
1 2 3 4 5 6 7 8 2 3 1 5 4 8 6 7 4 1 2 3 7 5 8 6 6 4 7 8 1 2 3 5 7 5 8 2 6 3 4 1 5 8 4 6 2 7 1 3 8 7 6 1 3 4 5 2 3 6 5 7 8 1 2 4
计分
这是code-golf,因此以字节为单位的最短代码获胜,只有一个例外。对于输入N = 2, 3
,没有有效的解决方案。如果您的代码可以处理此问题(无需完成任何操作,也不会输出空字符串),并且仍然可以处理N = 1
(输出1
结果),请减少20%的字节数。
N
。此JavaScript代码可以N = 1, 5 or 7
帮助任何人,但都可以工作:for(o="",y=N;y--;o+="\n")for(x=N;x--;)o+=(((N-y)*2+x)%N)+1
N = 1
情况更为明确:针对奖金的答案应该返回1
,而不是空字符串。