同じ文字キューブを複数回使用しないというルールが無視される場合、任意の大きなBoggleグリッドに単語を配置する方法を検討してください。また、無制限の数の文字キューブ(すべての文字が存在する)があり、ちょうどであると仮定します。Qu
Q
単語MISSISSIPPI
は6個のキューブのみを使用して配置できます。可能な取り決めの1つを次に示します。
S
MIS
PP
から始めて、M
単語全体が綴られるまで、水平、垂直、または斜めに任意のステップを繰り返し実行します。
驚いたことに、次のような長いフレーズでAMANAPLANACANALPANAMA
も必要なキューブは6つだけです。
MAN
PLC
ただし、より長く複雑な文字列に必要なキューブの最小数は必ずしも明らかではありません。
チャレンジ
文字列を取り込んで、最小数のキューブが使用されるように、このBoggleのような方法でそれを配置するプログラムを作成します。(結果のグリッドの寸法と空のセルの数は関係ありません。)
空のグリッドセルとして使用されるため、スペース(16進コード21〜7E)を除く各印刷可能ASCII文字に対して無制限の数のキューブがあると仮定します。印刷可能なASCII文字列(スペースなし)のみが入力されます。
入力は、stdinまたはコマンドラインから取得する必要があります。出力はstdout(または最も近い代替)に送られます。
出力の先頭または末尾の改行とスペースは問題ありません(ただし、異常な量がないことが望ましいです)。
検索スペースは、文字列が長くなるにつれて指数関数的に爆発しますが、アルゴリズムを効率的にしようとする必要はありません(それはいいことですが:))。これはコードゴルフであるため、バイト単位の最短ソリューションが優先されます。
例
入力がOklahoma!
(最小8文字)の場合、これらはすべて正確に8つの塗りつぶされたグリッドセルを持ち、(改訂された)Boggle読み取りパターンに従うため、これらはすべて有効な出力になります。
Oklaho
!m
または
!
Oamo
klh
または
lkO
!amo
h
等