行のすべての文字を取得することから始めます。次に、最初の文字を文字列にコピーし、それを辞書と比較します。次に、最初の 2 文字を取り、同じことを行います。7 文字の長さに達したら、最後の 6 文字を取得して辞書と比較します。その行のチェックがすべて完了したら、次の行に進みます。すべての行が完了したら、列に対して同じことを行います。
擬似コード:
for ($currentCollumn=1; $gridWidth > $currentCollumn; $currentCollumn++) {
$collumn = get collumn as string
for ($i=1;$i!=7;$i++) {
get first $i characters of $collumn and compare to dictionary
}
for ($i=1;$i!=7;$i++) {
get last $i characters of $collumn and compare to dictionary
}
}
for ($currentRow=1; $gridHeight > $currentRow; $currentRow++) {
$row = get row as string
for ($i=1;$i!=7;$i++) {
get first $i characters of $row and compare to dictionary
}
for ($i=1;$i!=7;$i++) {
get last $i characters of $row and compare to dictionary
}
}
編集: バージョン 2、単語が直線に限定されていないことに気がつかなかったので。
可能なすべての場所から開始します。
// define variables:
booleanArray path[x][y] = false;
p = pointerlocation;
stack[] = p;
currentString = "";
p.up/.down/.left/.right は、それぞれ y+1、y-1、x+1、x-1 の path[][] をチェックします。範囲外の場合は false を返します。
stack[] は x86 スタックのように機能します。最初のうちの最後の。
push() 新しいオブジェクトをスタックに追加します
pop() スタックに最後に追加されたオブジェクトを取得し、スタックから削除します
function getAllTheStrings(p.x, p.y) {
while (p) {
path (p.x, p.y) = true;
currentString += p.getCharacter();
// check neighbors
if (p.up) {
stack.push(p.up, path, currentString);
}
if (p.down) {
stack.push(p.down, path, currentString);
}
if (p.left) {
stack.push(p.left, path, currentString);
}
if (p.right) {
stack.push(p.right, path, currentString);
}
// add current string to list possible words
foundWords.push(currentString);
// pop next item from stack
overwrite variables with stored values of: p, path, currentString
if (stack is empty) {
p = false; // end loop
}
}
}
そして、それは次のように呼び出されます:
function getWords() {
for ($y=1; $gridHeight > $y; $y++) {
for ($x=1; $gridWidth > $x; $x++) {
getAllTheStrings(x,y);
}
}
この関数は、可能なパスのすべての組み合わせをチェックする必要があるため、グリッド サイズのスケーリングが非常に悪くなります。1x1 グリッドは 1 つのテストを実行します。2x2 には 28 回のテストが必要です。3x3 では、約 270 回のテストでカウントを失いました。
ループが終了foundWords
すると、辞書全体に対して単語ごとにチェックされます。見つかった 5 つの単語と辞書内の 100 の単語では、500 回の比較が行われます。実際には、辞書には少なくとも 1000 語が含まれます。