私は同様の問題の以前の質問を見ましたが、私はこのアルゴリズムに関連する特定の質問があります。アルゴリズム:言葉のリストを与えられたクロスワードパズルを解決する
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つのパラメータをブール値として使用して、単語が上または下に移動しているかどうかを考えましたが、それは私には実現不可能でした。
誰でもどのように方向性を保つためのアイデアがありますか?一般的に
再帰を使用して問題を解決できます。それぞれの可能な場所に第1の単語を置きます。それぞれについて、それぞれの可能な位置に第2の単語を置きます。第1と第2の各ペアリングについて、第3の単語をそれぞれの可能な位置に配置する。あなたの再帰的メソッドは 'recurse(partially_filled_crossword、remaining_words)'と書くことができ、両方の引数は配列であり、完成したクロスワード(配列)を表す配列を返すか、または検索ツリーのその部分に有効なクロスワードが存在しない場合は 'nil' –