众所周知的N皇后问题有一个变体,其中涉及皇后和骑士,并且据说“难度更大” 1。问题陈述如下:
您必须在棋chess上放置相等数量的骑士♞和皇后♛,以使任何棋子都不会攻击其他棋子。您可以在板上放置的最大块数是多少,可以用几种不同的方法来做?
在此代码高尔夫球挑战中,将为您提供3到32之间的输入n(以最适合您的语言的方式)。对于给定的n,上述问题可能有零个或更多个解决方案。如果没有解决方案,则必须不输出/返回任何内容(nil,空字符串,false,...)。否则,您必须给出两个结果:
- 尺寸为n的解决方案板(请参阅下文),在没有任何棋子受到攻击的情况下无法添加皇后或骑士棋子。皇后和骑士人数相等。
- 要运行的程序的源,该程序不接受任何输入,并且以相同的格式给出(i)具有相同大小n的另一个解决方案(或不提供任何东西),以及(ii)用于下一个解决方案的另一个程序(依此类推) ...)。
注意:
- 程序序列必须永远不会返回同一块板两次,必须涵盖大小为n的问题的所有可能解决方案,并最终必须终止(不产生输出)。
- 您可以返回两个值,返回一个并打印另一个值,或者打印两个返回值。
- 但是,如果您同时打印电路板和下一个程序,则不能将电路板视为下一个程序的一部分(建议您在注释中打印电路板,或者同时使用标准输出和错误流)。
- 程序的返回值必须是字符串,而不是闭包。
板格式
- 一块木板是大小为n的正方形。
- 棋盘格可以是空的,皇后或骑士。
- 您必须为每种单元格选择不同的值(即,在印刷电路板时可以使用Q,N以外的其他符号)。
- 如果返回一个非字符串板,则它必须是该板的n 2个值的有序集合(例如,矩阵,向量或以行/列为主的列表,...)。
如果要打印板,则可以将其打印为正方形或线条。例如,可以按以下方式打印大小为4的解决方案板(不需要空格;可以根据需要选择符号):
Q - - - - - - - - - - - - - N -
如果有这种感觉,您还可以输出:
♛ · · · · · · · · · · · · · ♞ ·
...但这足够了:
Q-------------N-
您可以按行优先或列优先顺序遍历单元无关紧要,因为存在对称解。例如,n = 4的解决方案是:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
您也可以将n = 5的解看做矩阵;板中含有#
,q
和n
符号,这是不同类型的空细胞(见我的回答如下)。我计数了2836个板,其中n = 6,就像在Sleafar的答案中一样(我在减少字节数时引入了一个错误,但现在已修复)。
非常感谢Sleafar在我的代码中发现的不是一个bug,而是两个bug。
得分
以字节为单位的最短代码获胜。
我们测量第一个程序的大小,该程序接受n。
1。皇后和骑士,作者:Roger KW Hui (注意!包含一个解决方案)
-------------------------N--------Q-
,由于可以添加更多片段,因此是无效的:)Q--------N---------------N--------Q-
。