2017-07-13 2 views
0

私は同様の問題の以前の質問を見ましたが、私はこのアルゴリズムに関連する特定の質問があります。アルゴリズム:言葉のリストを与えられたクロスワードパズルを解決する

10x10クロスワードグリッドが、グリッドに記入する必要がある単語のセット(または場所の名前)とともに提供されます。問題文(https://www.hackerrank.com/challenges/crossword-puzzle/problem)は次のとおりです。 グリッド内のセルは、最初は+記号または - 記号です。 +とマークされているセルはそのまま残す必要があります。 aでマークされたセルは、適切な文字で埋められる必要があります。

サンプル入力:

+-++++++++ 
+-++++++++ 
+-++++++++ 
+-----++++ 
+-+++-++++ 
+-+++-++++ 
+++++-++++ 
++------++ 
+++++-++++ 
+++++-++++ 
LONDON;DELHI;ICELAND;ANKARA 

対応する出力:

+L++++++++ 
+O++++++++ 
+N++++++++ 
+DELHI++++ 
+O+++C++++ 
+N+++E++++ 
+++++L++++ 
++ANKARA++ 
+++++N++++ 
+++++D++++ 

は、私は完全に私はちょうど空の中で次の使用可能な文字を入れて問題を理解せずにアルゴリズムを書き出すのミスを犯しましたその方法で迷路を解決してください(私のコードはここにあります):

def populate_grid(maze, locations) 
    maze.each_index do |row| 
     maze[row].each_index do |col| 
      if maze[row][col] == "-" 
       maze[row][col] = locations.first[0] 
       if locations.first.length == 1 
        locations.shift # remove this location altogether 
       else 
        locations[0] = locations[0][1...locations.first.length] 
       end 
       populate_grid(maze, locations) 
      end 
     end 
    end 
end 

Un幸運にも、この問題の解決策はありません。単語ごとに一貫した方向性を構築する方法を知りたいと思います(例:水平/垂直方向のみ)。私は、3つのパラメータをブール値として使用して、単語が上または下に移動しているかどうかを考えましたが、それは私には実現不可能でした。

誰でもどのように方向性を保つためのアイデアがありますか?一般的に

+0

再帰を使用して問題を解決できます。それぞれの可能な場所に第1の単語を置きます。それぞれについて、それぞれの可能な位置に第2の単語を置きます。第1と第2の各ペアリングについて、第3の単語をそれぞれの可能な位置に配置する。あなたの再帰的メソッドは 'recurse(partially_filled_crossword、remaining_words)'と書くことができ、両方の引数は配列であり、完成したクロスワード(配列)を表す配列を返すか、または検索ツリーのその部分に有効なクロスワードが存在しない場合は 'nil' –

答えて

0

、あなたはユニットとして全体の単語を挿入するためのルーチンで(それがあなたのためにmaze cruciverbalistの用語です)単語単位として辞書で処理し、グリッドを処理する必要があります。

利用可能なすべての場所を識別するには、グリッドを「解析する」必要があります。 matchに利用可能な場所に単語を、またはその逆に関数を書き込みます。場所は、開始する正方形(行、列)、方向(ブール値)、および文字パターン(空白があり、交差する単語が既に入力されている場合を除く)で構成されます。 matchは、すでに入力されている単語の長さと任意の四角形を考慮します。

これで、各単語を順番に並べるか、各グリッドの場所に塗りつぶすことができます。単語を入力する場所が見つかるまでmatchに電話してください。何も見つからない場合は、現在のグリッドの塗りつぶしが解決策につながるわけではありません。一言を取り消してやり直してください。あなたがスポットを見つけたら、単語(別の機能)を記入し、現在の記入済みの手紙で任意の交差点を更新し、あなたの反復で次の単語または場所に移動します。

正常に終了したら、完成したパズルがあります。

あなたは動いていますか?

+0

コードは、これをもっと便利な答えにします。 –

+1

@CarySwoveland:私は、データ構造を設計し、作業コードを提供することは、SOの汎用目的をはるかに超えていると感じています。私はOPと、投稿されたコードが無効な攻撃であることに同意します。適切な変更は大きな書き換えです。 – Prune

+0

私はあなたに答えを批判しているわけではありません。ちょうどそのコードがOPや他の読者にもっと役立つでしょう。それにもかかわらず、SOの一般目的をはるかに超えていると見なされる可能性のある回答が見受けられますが、それでもなお評価されています。 –

関連する問題