非パリンドロームポリグロットボグルで作業しているとき、2本の弦だけでも、可能な限り効率的にコードをボグルボードに詰め込むのは非常に面倒です。しかし、私たちはプログラマーですよね?物事を自動化する方法を知っています。
文字列のリストが与えられたら、それらの文字列のそれぞれが(他の文字とは独立して)見つかるBoggleボードを生成します。課題は、Boggleボードをできるだけ小さくすることです。これは(願わくば)かなり難しいタスクであるため、これはコードチャレンジです。最適性の要件はありません-できる限りそれを行うことが課題です。
ルール
- Boggleボードは長方形で、大文字のみが含まれます。したがって、入力文字列には大文字のみが含まれます。
- 通常のBoggleルールが適用されます。文字列は、どこからでも、隣接する文字(水平、垂直、または斜め)に繰り返し移動して文字列を見つけることができる場合、ボードの一部です。単一の文字列を形成するには、ボードのセルを複数回使用することはできません。ただし、異なる文字列間で文字が再利用される場合があります。
- テストデータを処理するのに30分かかり、コードで4 GBを超えるメモリを使用してはなりません。メモリーの制限については少し余裕を持たせますが、プログラムが一貫して4 GBを超えるか、それを大幅に上回るスパイクを使用する場合は、(一時的に)失格させます。
- Windows 8を実行している自分のマシンですべての提出物をテストします。UbuntuVMがありますが、テストする必要がある場合は、30分を他の方法で使用することはできません。選択した言語の無料のインタープリター/コンパイラーへのリンクと、コードのコンパイル/実行方法に関する指示を含めてください。
- スコアは、以下のテストデータ用のBoggleボードのサイズになります(改行はカウントしません)。同点の場合(たとえば、複数の人が最適なソリューションを作成できたため)、勝者はこの最適なソリューションをより迅速に作成する提出物になります。
- テストデータに対してコードを最適化しないでください。誰かがそうする疑いがある場合、私は新しいテストデータを生成する権利を留保します。
例
与えられた文字列
FOO
BAR
BOOM
かつては4x3 Boggleボードに簡単に入れることができました。
FOOX
BARX
BOOM
文字列が直線である必要がないという事実を利用することで、5x2に圧縮できます。
BORFO
OMABO
ただし、異なる文字列間で文字を再利用することでさらに小さくし、文字列を4x2に収めることができます。
FOOM
BARX
今B
の両方に使用されるBOOM
とBAR
、そしてOO
両方のために使用されているBOOM
とFOO
。
テストデータ
提出物は、次の50個の文字列でテストされます。テストのために、このデータのより小さなサブセットを使用するだけで、より短時間で実行できます。このテストデータの絶対的な下限は120文字のボードですが、これは必ずしも達成できるとは限りません。
T
WP
GVI
CIHM
EGWIV
QUTYFZ
LWJVPNG
XJMJQWSW
JLPNHFDUW
SWMHBBZWUG
XVDBMDQWDEV
TIUGAVZVUECC
IWDICFWBPSPQR
MMNWFBGMEXMSPY
YIHYXGJXKOUOIZA
BZSANEJNJWWNUJLJ
XTRMGOVPHVZYLLKKG
FLXFVVHNTWLMRRQYFQ
VZKJRAFQIYSBSXORTSH
FNQDIGCPALCHVLHDNZAV
GEAZYFSBSWCETXFKMSWLG
KWIZCEHVBDHEBGDGCJHOID
SKMQPHJAPDQKKHGTIPJCLMH
ZSFQDNYHALSUVWESQVVEUIQC
HXHBESUFCCECHNSTQGDUZPQRB
DSLXVHMOMLUXVHCNOJCBBRPVYB
DVTXKAOYYYRBVAVPSUAOYHIPPWN
PJAIYAWHMTNHTQDZDERPZYQEMLBZ
SYNSHJNOIWESMKWTBIANYUAUNRZOS
WADGUKIHUUFVRVUIBFUXQIOLAWIXAU
LGLXUFIXBEPSOFCKIAHXSHVKZPCXVPI
LIUYFHITTUYKDVQOZPNGZLWOZSRJTCTZ
IZDFTFFPNEBIYGVNTZHINICBXBXLBNBAL
BSKQNTPVUAVBXZGHVZCOUCRGCYISGFGYAS
DPGYYCIKDGCETXQOZGEQQLFQWACMVDTRYAT
RQDNIPGUHRYDRVHIPJLOWKBXMIBFAWCJGFMC
PFKOAGEQLXCMISSVEARWAPVYMRDCLSLPJOMQQ
EQPCNHQPTWABPFBVBXHQTFYELPNMNCWVKDDKGR
RAHTJMGIQJOJVWJBIHVRLJYVCSQJCKMEZRGRJMU
SZBJBPQYVYKDHAJHZMHBEWQEAQQKIEYCFACNLJBC
ANVDUCVXBPIZVRAXEBFEJOHSYKEKBIJELPIWEYXKH
DJUNPRLTISBFMGBEQNXSNUSOGDJNKESVKGAAMTIVXK
TZPUHDSHZFEURBNZTFBKXCDPYRELIAFMUWDIQTYWXGU
FJIKJROQSFSZUCGOOFJIEHBZREEUUSZWOLYFPCYHUSMR
TPMHJEAWVAJOCSDOPMQMHKRESBQSTRBXESYGCDVKLFOVS
ABJCCDJYMYDCYPZSGPGIAIKZQBYTZFDWYUZQBOESDSDGOY
IIHKTVPJNJDBCBOHCIYOPBKOVVKGNAKBDKEEKYIPRPHZOMF
IABGEPCSPNSMLVJBSGLRYNFSSYIALHWWAINTAVZAGJRVMDPW
GFMFVEFYJQJASVRIBLULUEHPMZPEXJMHIEMGJRMBLQLBDGTWT
YPWHLCVHQAVKVGHMLSOMPRERNHVYBECGCUUWTXNQBBTCMVTOVA
検証者
次のスタックスニペットを使用して、Boggleボードに特定のリストのすべての文字列が含まれているかどうかを確認できます。edc65の回答からBoggle検索コードをここに移植しました。バグがあると思われる場合はお知らせください。