0

特定の条件下で、戦艦の沈没部分に効率的な AI をコーディングできるかどうかを判断するのに苦労しています。

条件は次のとおりです。

  • 最短の船の長さは 1 になることもあります。最初に、ゲーム マネージャーが配置する船の配列を提供するときに、それを知ることができます。
  • 船は重複できませんが、隣接している可能性があります
  • ゲームマネージャーは、最後のショットがヒット、沈没、またはミスのいずれであったかを示します。撃沈した船の長さに関する情報がない
  • ゲーム マネージャーは 2 つの方法を使用してプレーヤーと通信します。1 つ目はどこでショットするかを尋ね、2 つ目はその結果を伝えます。

さて、私が正式に表現できないのは、沈没船の長さです。船を沈めたら、その長さを理解する方法がわかりません。

ゲーム内の船の長さに基づいてどこを撃つかを推定するために密度アプローチを使用したいのですが、沈没船の長さを取得するシステムがなければ、私の密度は決して「賢く」なりません。当分の間、すべてのヒットの North/South/East/West スポットを保存し、スタックが空になったらジョブが完了したと見なします。もちろん、それは非常にターンを消費します。

私が求めていることを明確にしようとしています。シュートの結果を次のように追跡する二次元配列があるとします。

u = 未知のスポット

m = x, y でシュートを放ち、ゲーム マネージャーが「ミス」と言った

h = あなたが x, y で撃ち、ゲーム マネージャーはあなたに「ヒット」と言った

s = x, y で撃ち、ゲーム マネージャーは「沈んだ」と言った

ボードが 5 * 5 であるとします。最初は次のようになります。

      1 2 3 4
    1 u u u u
    2 u u u u
    3 u u u u
    4 u u u u

2、3 でシュートし、ゲーム マネージャーが「ヒット」と言ったとします。

      1 2 3 4
    1 u u u u
    2 u u h u
    3 u u u u
    4 u u u u

さて、あなたは最後のショットを見回し始めます。密度アプローチを使用するか、ヒットした場所から N/S/E/W スポットのスタックを使用するかは関係ありません。あなたのアルゴリズムが 3, 3 を思いついたとしましょう。今回はミスです:

      1 2 3 4
    1 u u u u
    2 u u h u
    3 u u m u
    4 u u u u

2, 2 を試すとヒットします。

      1 2 3 4
    1 u u u u
    2 u h h u
    3 u u m u
    4 u u u u

ここで 2,1 としましょう。ゲーム マネージャーは「沈んだ」と伝えます。

      1 2 3 4
    1 u u u u
    2 s h h u
    3 u u m u
    4 u u u u

さて、船が隣接している可能性があることを知っている場合、N/S/E/W のすべてのスポットを撃たずに、沈めたばかりの船の長さを知るにはどうすればよいでしょうか? この場合、たとえば、沈めたものをほぼ確実に確認するには、2,4 と 1,3 で撃つ必要があり、ターンが消費されます。より大きく、より人口の多いボードを想像すると、物事はさらに多くのターンを消費し、不確実になります.

質問は簡単です: この N/S/E/W 時間のかかる && 不確実なアプローチよりも良いものはありませんか?

私の質問を明確に説明していただければ幸いです。

ps 私はこの質問を認識していますが、C# 言語を読むことができません: 数か月前に Java を使い始めたばかりです。ちなみに、誰かが沈没部分のドレッドノート アルゴリズムを喜んで説明してくれたら幸いです :)

ps 2私もこれを認識しています(最後の図を参照)。私が理解する限り、彼が最小長= 2と見なすという事実を除いて、物事はまったく同じに見えます。私は常に2つのアルゴリズムをコーディングできます(検出した場合最小の長さ > 1、最小の長さ = 1 の場合は、もう 1 つ「消費するターン」がありますが、彼がどのように処理しているのかわかりません...

4

0 に答える 0