任务
给定输入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,而不是空字符串。








