よく知られているNクイーンの問題には、クイーンとナイトが関係し、「かなり難しい」 と言われている変種があります1。問題のステートメントは次のとおりです。
駒が他の駒を攻撃しないように、同じ数の騎士♞と女王♛をチェス盤に配置する必要があります。ボードに配置できるピースの最大数はいくつですか?また、いくつの方法でそれを行うことができますか?
このコードゴルフチャレンジでは、3〜32の入力nが(言語に最適な方法で)与えられます。与えられたnに対して、上記の問題に対するゼロ以上の解があるかもしれません。解決策がない場合は、何も出力/返さない必要があります(nil、空の文字列、false、...)。それ以外の場合、2つの結果を与える必要があります。
- サイズnのソリューションボード(以下を参照)。クイーンまたはナイトのチェスの駒を、攻撃を受けている駒なしで追加することはできません。同数の女王と騎士がいるに違いない。
- プログラムのソースには入力を受け付けず、(I)が得られる実行する別の溶液(または何も同じサイズ)のn次の溶液のための(ii)の他のプログラムと同様に、同じ形式で、(など...)。
ご了承ください:
- プログラムのシーケンスは、同じボードを2回返してはならず、サイズnの問題に対して考えられるすべてのソリューションをカバーし、最終的に終了する必要があります(出力は生成されません)。
- 2つの値を返すか、1つを返してもう1つを印刷するか、2つの戻り値を印刷することができます。
- ただし、ボードと次のプログラムの両方を印刷する場合、ボードを次のプログラムの一部とみなしてはなりません(コメントでボードを印刷するか、標準出力とエラーストリームの両方を使用することをお勧めします)。
- 戻り値としてのプログラムは、クロージャではなく文字列でなければなりません。
ボードフォーマット
- ボードは、サイズ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の答えのように、(バイト数を減らしたとき、私はバグを導入し、それが修正されました)。
私のコードで1つではなく2つのバグを見つけてくれたSleafarに感謝します。
スコア
バイト単位の最短コードが勝ちます。
nを受け入れる最初のプログラムのサイズを測定します。
1。クイーンズアンドナイツ、ロジャーKWフイ(注意!ソリューションが含まれています)
-------------------------N--------Q-
、ピースを追加できるため無効です:)Q--------N---------------N--------Q-
。