Quando ho lavorato su Polyglot Boggle non palindromico , ho trovato abbastanza noioso imballare i codici nel modo più efficiente possibile sulla scheda Boggle, anche con solo due stringhe. Ma siamo programmatori, giusto? Sappiamo come automatizzare le cose.
Dato un elenco di stringhe, devi generare una scheda Boggle su cui è possibile trovare ciascuna di queste stringhe (indipendentemente dalle altre). La sfida è rendere la tavola Boggle il più piccola possibile. Poiché questo è (si spera) un compito piuttosto difficile, questa è una sfida al codice : non c'è alcun requisito per l'ottimalità - la sfida è farlo nel miglior modo possibile.
Regole
- La scheda Boggle sarà rettangolare e conterrà solo lettere maiuscole. Pertanto, le stringhe di input conterranno anche solo lettere maiuscole.
- Si applicano le consuete regole di Boggle: una stringa fa parte del tabellone se, a partire da qualsiasi punto, è possibile trovare la stringa spostandosi ripetutamente su caratteri adiacenti (orizzontale, verticale o diagonale). Per formare una singola stringa, non puoi usare nessuna cella della scheda più di una volta. Tuttavia, i caratteri possono essere riutilizzati tra stringhe diverse.
- Hai 30 minuti per elaborare i dati di test e il tuo codice non deve utilizzare più di 4 GB di memoria. Darò un po 'di margine di manovra al limite di memoria, ma se il tuo programma utilizza costantemente più di 4 GB o picchi significativamente al di sopra di esso, lo squalificherò (temporaneamente).
- Metterò alla prova tutte le comunicazioni sul mio computer, che esegue Windows 8. Ho una macchina virtuale Ubuntu, ma se dovessi provare che non sarai in grado di utilizzare i 30 minuti tanto quanto altrimenti. Includere un collegamento a un interprete / compilatore gratuito per la lingua prescelta, nonché istruzioni su come compilare / eseguire il codice.
- Il tuo punteggio sarà la dimensione della scheda Boggle per i dati del test di seguito (senza contare le nuove righe). In caso di pareggio (ad es. Perché più persone sono riuscite a produrre una soluzione ottimale), il vincitore sarà l'invio che produrrà questa soluzione ottimale più velocemente.
- Non è necessario ottimizzare il codice specificamente per i dati di test. Se sospetto che qualcuno lo faccia, mi riservo il diritto di generare nuovi dati di test.
Esempio
Date le stringhe
FOO
BAR
BOOM
Una volta potevano banalmente metterli in una scheda Boggle 4x3:
FOOX
BARX
BOOM
Facendo uso del fatto che le stringhe non devono essere dritte, possiamo comprimere in 5x2:
BORFO
OMABO
Ma possiamo renderlo ancora più piccolo riutilizzando i caratteri tra stringhe diverse e adattando le stringhe in 4x2:
FOOM
BARX
Ora B
viene usato per entrambi BOOM
e BAR
, e OO
per entrambi BOOM
e FOO
.
Dati di test
Il tuo invio verrà testato sulle seguenti 50 stringhe. A scopo di test è possibile semplicemente utilizzare sottoinsiemi più piccoli di questi dati che dovrebbero quindi essere eseguiti più rapidamente. Credo che il limite inferiore assoluto per questi dati di test sia una scheda con 120 caratteri, sebbene ciò non sia necessariamente realizzabile.
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
Verifier
Puoi utilizzare il seguente frammento di stack per verificare se una scheda Boggle contiene tutte le stringhe in un determinato elenco. Ho portato il codice di ricerca di Boggle dalla risposta di edc65 qui . Fammi sapere se qualcosa sembra difettoso.