Lorsque je travaillais sur un Boggle polyglotte non palindromique , j'ai trouvé assez fastidieux de compresser les codes aussi efficacement que possible sur la carte Boggle, même avec seulement deux chaînes. Mais nous sommes programmeurs, non? Nous savons automatiser les choses.
Étant donné une liste de chaînes, vous devez générer un tableau Boggle sur lequel chacune de ces chaînes peut être trouvée (indépendamment des autres). Le défi est de rendre la planche Boggle aussi petite que possible. Comme il s'agit (espérons-le) d'une tâche plutôt difficile, il s'agit d'un défi de code : il n'y a aucune exigence d'optimalité - le défi est de le faire aussi bien que possible.
Règles
- Le tableau Boggle sera rectangulaire et ne contiendra que des lettres majuscules. Par conséquent, les chaînes d'entrée ne contiendront également que des lettres majuscules.
- Les règles habituelles de Boggle s'appliquent: une chaîne fait partie du tableau si, en commençant n'importe où, vous pouvez trouver la chaîne en vous déplaçant à plusieurs reprises vers des caractères adjacents (horizontalement, verticalement ou en diagonale). Pour former une seule chaîne, vous ne pouvez utiliser aucune cellule du tableau plus d'une fois. Cependant, les personnages peuvent être réutilisés entre différentes chaînes.
- Vous disposez de 30 minutes pour traiter les données de test et votre code ne doit pas utiliser plus de 4 Go de mémoire. Je donnerai un peu de marge de manœuvre sur la limite de mémoire, mais si votre programme utilise régulièrement plus de 4 Go ou augmente considérablement au-dessus, je le disqualifierai (temporairement).
- Je vais tester toutes les soumissions sur ma propre machine, qui exécute Windows 8. J'ai une machine virtuelle Ubuntu, mais si je dois tester cela, vous ne pourrez pas utiliser autant les 30 minutes qu'autrement. Veuillez inclure un lien vers un interprète / compilateur gratuit pour la langue de votre choix, ainsi que des instructions sur la façon de compiler / exécuter votre code.
- Votre score sera de la taille du tableau Boggle pour les données de test ci-dessous (sans compter les nouvelles lignes). Dans le cas d'une égalité (par exemple parce que plusieurs personnes ont réussi à produire une solution optimale), le gagnant sera la soumission qui produit cette solution optimale plus rapidement.
- Vous ne devez pas optimiser votre code spécifiquement vers les données de test. Si je soupçonne quelqu'un de le faire, je me réserve le droit de générer de nouvelles données de test.
Exemple
Vu les cordes
FOO
BAR
BOOM
Une fois, on pouvait les mettre trivialement dans une planche Boggle 4x3:
FOOX
BARX
BOOM
En utilisant le fait que les chaînes n'ont pas à être droites, nous pouvons les compresser en 5x2:
BORFO
OMABO
Mais nous pouvons le rendre encore plus petit en réutilisant des caractères entre différentes chaînes, et adapter les chaînes en 4x2:
FOOM
BARX
Maintenant, le B
est utilisé pour les deux BOOM
et BAR
, et le OO
est utilisé pour les deux BOOM
et FOO
.
Données de test
Votre soumission sera testée sur les 50 chaînes suivantes. À des fins de test, vous pouvez simplement utiliser des sous-ensembles plus petits de ces données qui devraient ensuite s'exécuter plus rapidement. Je crois que la limite inférieure absolue de ces données de test est une carte de 120 caractères, bien que ce ne soit pas nécessairement réalisable.
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
Vérifieur
Vous pouvez utiliser l'extrait de pile suivant pour vérifier si un tableau Boggle contient toutes les chaînes dans une liste donnée. J'ai porté le code de recherche Boggle de la réponse d' edc65 ici . Faites-moi savoir si quelque chose semble buggé.