騎士の次のツアー


8

私たちは皆、ナイトツアーパズルについて聞いたことがあります。チェス盤のすべての正方形を通過する騎士の道を見つけてください。しかし、正直に言って、それは少し退屈です。それでは、騎士に少し挑戦してみましょう。

仕事

任意のサイズ、任意の形のチェス盤で、すべての正方形を騎士が通過するプログラムを作成します。これは、チェス盤を入力として受け取り、一連の動きと開始位置を出力します。ボードが不可能な場合は、可能な限り長いツアーの一連の動きと開始位置を出力する必要があります。注:騎士は往復する必要はありません。彼が家に帰る別の方法があると仮定します。

チェスの駒は小さいので、あなたのコードは騎士が持ち歩けるように十分に小さくする必要があります。

入力

入力は、チェス盤の文字列ベースまたは配列ベースの表現になります。ここで、非空白/真の値は正方形であり、空白/偽の値は空のスペースです。簡単にするために、例ではグリッドに配置された#とを使用します

出力

出力は2つの大きな整数で、その後に一連の4ビット整数または対応する言語が続きます。2つの大きな整数は開始座標を表し、次の数字はそのような動きを表します。

 7 0
6   1
  K
5   2
 4 3

ここで、K移動前の位置であり、その数は、移動後の位置です。

Knight's Tourパズルには多くの可能な解決策があるため、出力例のみを提供します。より多くの出力があるかもしれません。

###
# #
###
0 0 3 0 5 2 7 4 1

新しい課題:より多くの例を考え出す


「最長ための」 - >「最長のため?

あなたはハミルトニアンパスまたはハミルトニアンサイクルの後ですか?
Peter Taylor、

@PeterTaylorゴルファーのどっちでもいい!パスは問題ありません。有効なパスであるため、サイクルもそうです。
wizzwizz4 2016

回答:


2

Mathematica、151バイト

Needs@"Combinatorica`"
{Reverse@#[[1]]-1,3-Floor[1.2Arg[Complex@@@Differences@#]]}&[#[[HamiltonianPath@MakeGraph[#,Norm[#-#2]^2==5&]]]&@Position[#,1]]&

明らかに、HamiltonianPath@MakeGraph[#,Norm[#-#2]^2==5&]すべての作業を行います。

入力はのような2D(0,1)行列です{{0,0,1},{1,1,1},{1,0,1},{1,1,1}}

出力は次のようになります。 {{2, 0}, {5, 3, 0, 5, 2, 7, 4, 1}}

Mathematicaゴルフについてはあまり詳しくないので、改善点を自由に指摘してください。10億の純粋な関数を使用するよりも、個々の結果を保存するより良い方法はありますか?

バイトを保存しました。ありがとう、CatsAreFluffy。


@を使用してHamiltonianPathを適用できます。
CalculatorFeline

2
この回答は、「ボードが不可能な場合、可能な限り長いツアーの移動と開始位置のセットを出力する必要があります」を満たさないため無効です。
バブラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.