スクラブルのような単語ゲームを分析して、ボードに配置された文字のブロックがそれ以上の文字を配置できなくなるかどうか、つまりゲームを「ロック」できるかどうかを調べています。2x2 ブロックの例で説明してみましょう:
有効な 2x2 ブロック (約 5000 ブロック) のリストを作成しました。リストは次のようになります。
matrix_2x2
AA,AA
AA,AB
AA,AD
AA,AE
etc...
ボード上の「AA,AE」は次のようになります (実際のボードは 15x15 です)。
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][A][A][ ][ ][ ]
[ ][ ][ ][A][E][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
有効な単語の完全なリストもあります。このように見えます
dic_word
AA
AAH
AAHED
AAHING
AAHS
AAL
etc...
MySQL に両方のリストがあります。
マトリックス リストの各エントリを繰り返し処理し、SELECT クエリを作成することで、コードでこれを実行できることはわかっています。行列の各行は次のようになります。
SELECT COUNT(word) > 0 FROM dic_word d WHERE (INSTR(word, "AA") OR INSTR(word, "AE") OR INSTR(word, "AA") OR INSTR(word, "AE")) AND (word <> "AA" AND word <> "AB" AND word <> "AA" AND word <> "AB")
これを MySQL で完全に実行できるかどうか疑問に思っていました。
アップデート
上記のSQLクエリは機能せず、私が求めているものをうまく説明していません. 私が求めているものを明確にしてみましょう:
QX
andQQ
とがすべて英語で有効な単語であると仮定するとXX
、QX,QX が行列リストのエントリになります。
英単語の部分文字列でQX
もQQ
orでもないので、ボードに配置された QX,QX はゲームを「ロック」します (つまり、追加の文字を配置できなくなります)。XX
私はこれらの行列をロックした後、すべての有効な 2x2 行列を調べることから始めます。現在、有効な 3x3 ブロックすべてのリストを作成しています。これまでに 200.000 以上が見つかりました。
補足として、そのようなロックマトリックスが存在することは本当に疑わしいですが、それは私がチェックしているものです。