Bei der Arbeit mit dem nicht-palindromischen Polyglot-Boggle war es ziemlich mühsam, die Codes auch mit nur zwei Zeichenfolgen so effizient wie möglich auf das Boggle-Board zu packen. Aber wir sind Programmierer, oder? Wir wissen, wie man Dinge automatisiert.
Wenn Sie eine Liste von Zeichenfolgen haben, müssen Sie ein Boggle-Board generieren, auf dem sich jede dieser Zeichenfolgen befindet (unabhängig von den anderen). Die Herausforderung besteht darin, das Boggle-Board so klein wie möglich zu gestalten. Da dies (hoffentlich) eine ziemlich schwierige Aufgabe ist, handelt es sich um eine Code-Herausforderung : Es gibt keine Anforderung an die Optimalität - die Herausforderung besteht darin, dies so gut wie möglich zu tun.
Regeln
- Die Boggle-Tafel ist rechteckig und enthält nur Großbuchstaben. Daher enthalten die Eingabezeichenfolgen auch nur Großbuchstaben.
- Es gelten die üblichen Boggle-Regeln: Eine Zeichenfolge ist Teil des Spielplans, wenn Sie die Zeichenfolge von einer beliebigen Stelle aus finden, indem Sie wiederholt zu benachbarten Zeichen wechseln (horizontal, vertikal oder diagonal). Um eine einzelne Zeichenfolge zu bilden, können Sie keine Zelle der Platine mehr als einmal verwenden. Zeichen können jedoch zwischen verschiedenen Zeichenfolgen wiederverwendet werden.
- Sie haben 30 Minuten Zeit, um die Testdaten zu verarbeiten, und Ihr Code darf nicht mehr als 4 GB Arbeitsspeicher belegen. Ich werde ein wenig Spielraum für die Speicherbeschränkung geben, aber wenn Ihr Programm durchweg mehr als 4 GB oder Spitzenwerte verwendet, werde ich es (vorübergehend) disqualifizieren.
- Ich werde alle Einsendungen auf meinem eigenen Computer testen, auf dem Windows 8 ausgeführt wird. Ich habe zwar eine Ubuntu-VM, aber wenn ich das testen muss, können Sie die 30 Minuten nicht so gut nutzen wie sonst. Bitte fügen Sie einen Link zu einem kostenlosen Interpreter / Compiler für Ihre gewählte Sprache sowie Anweisungen zum Kompilieren / Ausführen Ihres Codes bei.
- Ihre Punktzahl entspricht der Größe des Boggle-Boards für die folgenden Testdaten (ohne die Zeilenumbrüche). Bei einem Unentschieden (z. B. weil es mehreren Personen gelungen ist, eine optimale Lösung zu erstellen) gewinnt die Einsendung, die diese optimale Lösung schneller erstellt.
- Sie dürfen Ihren Code nicht speziell für die Testdaten optimieren. Wenn ich dies vermute, behalte ich mir das Recht vor, neue Testdaten zu generieren.
Beispiel
Angesichts der Saiten
FOO
BAR
BOOM
Once konnte sie einfach in ein 4x3 Boggle Board stecken:
FOOX
BARX
BOOM
Indem wir die Tatsache ausnutzen, dass Strings nicht gerade sein müssen, können wir sie auf 5x2 komprimieren:
BORFO
OMABO
Aber wir können es noch kleiner machen, indem wir Zeichen zwischen verschiedenen Zeichenfolgen wiederverwenden und die Zeichenfolgen in 4x2 einfügen:
FOOM
BARX
Jetzt B
wird das für beide BOOM
und verwendet BAR
, und das OO
wird für beide BOOM
und verwendet FOO
.
Testdaten
Ihr Beitrag wird an den folgenden 50 Zeichenfolgen getestet. Zu Testzwecken können Sie einfach kleinere Teilmengen dieser Daten verwenden, die dann schneller ausgeführt werden sollen. Ich glaube, dass die absolute Untergrenze für diese Testdaten ein Board mit 120 Zeichen ist, obwohl dies nicht unbedingt erreichbar ist.
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
Verifizierer
Mit dem folgenden Stack-Snippet können Sie überprüfen, ob eine Boggle-Karte alle Zeichenfolgen in einer bestimmten Liste enthält. Ich habe den Boggle- Suchcode aus der Antwort von edc65 hierher portiert . Lassen Sie mich wissen, wenn etwas fehlerhaft erscheint.