Ketika mengerjakan Non-Palindromic Polyglot Boggle , saya merasa cukup membosankan untuk mengemas kode seefisien mungkin ke papan Boggle, bahkan dengan hanya dua string. Tapi kami programmer, kan? Kami tahu cara mengotomatisasi sesuatu.
Diberikan daftar string, Anda akan menghasilkan papan Boggle di mana masing-masing string dapat ditemukan (terlepas dari yang lain). Tantangannya adalah membuat papan Boggle sekecil mungkin. Karena ini (semoga) tugas yang agak sulit, ini adalah tantangan kode : tidak ada persyaratan untuk optimalitas - tantangannya adalah melakukannya sebaik yang Anda bisa.
Aturan
- Papan Boggle akan berbentuk persegi panjang dan hanya berisi huruf besar. Oleh karena itu, string input juga hanya akan berisi huruf besar.
- Aturan Boggle yang biasa berlaku: string adalah bagian dari papan jika, mulai dari mana saja, Anda dapat menemukan string dengan berulang kali berpindah ke karakter yang berdekatan (horizontal, vertikal, atau diagonal). Untuk membentuk string tunggal, Anda tidak dapat menggunakan sel papan apa pun lebih dari sekali. Namun, karakter dapat digunakan kembali di antara string yang berbeda.
- Anda punya waktu 30 menit untuk memproses data pengujian, dan kode Anda tidak boleh menggunakan lebih dari 4 GB memori. Saya akan memberikan sedikit kelonggaran pada batas memori, tetapi jika program Anda secara konsisten menggunakan lebih dari 4 GB atau lonjakan secara signifikan di atasnya, saya akan (sementara) mendiskualifikasi itu.
- Saya akan menguji semua kiriman di mesin saya sendiri, yang menjalankan Windows 8. Saya memang memiliki Ubuntu VM, tetapi jika saya harus mengujinya Anda tidak akan dapat menggunakan sebanyak 30 menit sebanyak sebaliknya. Harap sertakan tautan ke juru bahasa gratis / kompiler untuk bahasa pilihan Anda, serta instruksi tentang cara menyusun / menjalankan kode Anda.
- Skor Anda akan menjadi ukuran papan Boggle untuk data tes di bawah ini (tidak termasuk baris baru). Dalam kasus seri (mis. Karena banyak orang berhasil menghasilkan solusi optimal), pemenangnya adalah pengajuan yang menghasilkan solusi optimal ini lebih cepat.
- Anda tidak boleh mengoptimalkan kode Anda secara khusus terhadap data pengujian. Jika saya mencurigai ada yang melakukannya, saya berhak untuk menghasilkan data pengujian baru.
Contoh
Diberikan string
FOO
BAR
BOOM
Sekali mudah bisa menempatkan mereka di papan Boggle 4x3:
FOOX
BARX
BOOM
Dengan memanfaatkan fakta bahwa string tidak harus lurus, kita dapat mengompresnya menjadi 5x2:
BORFO
OMABO
Tapi kita bisa membuatnya lebih kecil dengan menggunakan kembali karakter di antara string yang berbeda, dan menyesuaikan string di 4x2:
FOOM
BARX
Sekarang B
digunakan untuk keduanya BOOM
dan BAR
, dan OO
digunakan untuk keduanya BOOM
dan FOO
.
Data Uji
Kiriman Anda akan diuji pada 50 string berikut. Untuk tujuan pengujian Anda cukup menggunakan himpunan bagian kecil dari data ini yang kemudian harus berjalan lebih cepat. Saya percaya bahwa batas bawah absolut untuk data tes ini adalah papan dengan 120 karakter, meskipun ini belum tentu dapat dicapai.
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
Penguji
Anda dapat menggunakan Cuplikan Stack berikut untuk memverifikasi apakah papan Boggle berisi semua string dalam daftar yang diberikan. Saya porting kode pencarian Boggle dari jawaban edc65 di sini . Beri tahu saya jika ada yang bermasalah.
sumber