Palindromik Olmayan Polyglot Boggle üzerinde çalışırken , kodları sadece iki dizeyle bile Boggle panosuna mümkün olduğunca verimli bir şekilde paketlemek oldukça sıkıcı buldum. Ama biz programcıyız, değil mi? Bir şeyi nasıl otomatikleştireceğimizi biliyoruz.
Dizelerin bir listesi verildiğinde, bu dizelerin her birinin (diğerlerinden bağımsız olarak) bulunabileceği bir Boggle panosu oluşturmalısınız. Zorluk Boggle tahtasını mümkün olduğunca küçük yapmaktır. Bu (umarım) oldukça zor bir görev olduğundan, bu bir kod meydan okumasıdır: optimallik için herhangi bir gereklilik yoktur - zorluk bunu olabildiğince yapmaktır.
kurallar
- Boggle tahtası dikdörtgen olacak ve sadece büyük harfler içerecektir. Bu nedenle, giriş dizeleri yalnızca büyük harf içerecektir.
- Her zamanki Boggle kuralları geçerlidir: herhangi bir yerden başlayarak, bitişik karakterlere (yatay, dikey veya çapraz) art arda hareket ederek dizeyi bulabilirseniz, bir dize tahtanın bir parçasıdır. Tek bir dize oluşturmak için, kartın herhangi bir hücresini bir kereden fazla kullanamazsınız. Ancak, karakterler olabilir farklı dizeleri arasında yeniden.
- Test verilerini işlemek için 30 dakikanız var ve kodunuz 4 GB'den fazla bellek kullanmamalıdır. Bellek sınırında biraz boşluk bırakacağım, ancak programınız sürekli olarak 4 GB'den fazla kullanıyorsa veya önemli ölçüde üzerinde yükselirse, (geçici olarak) diskalifiye edeceğim.
- Tüm gönderimleri Windows 8 çalıştıran kendi makinemde test edeceğim. Bir Ubuntu VM'm var, ancak bunu test etmek zorunda kalırsam, aksi takdirde 30 dakikadan fazla yararlanamayacaksınız. Lütfen seçtiğiniz dil için ücretsiz bir tercüman / derleyici bağlantısı ve kodunuzu nasıl derleyeceğiniz / çalıştıracağınıza ilişkin talimatları ekleyin.
- Puanınız, aşağıdaki test verileri için Boggle tahtasının boyutu olacaktır (yeni satırları saymaz). Beraberlik durumunda (örneğin, birden fazla kişi en uygun çözümü üretmeyi başardığı için) kazanan, bu en uygun çözümü daha hızlı üreten başvuru olacaktır.
- Kodunuzu özellikle test verilerine göre optimize etmemelisiniz. Herhangi birisinin bundan şüphelendiğimde, yeni test verileri oluşturma hakkını saklı tutarım.
Misal
Dizeler verildi
FOO
BAR
BOOM
Bir zamanlar onları 4x3 Boggle tahtasına koyabilirdi:
FOOX
BARX
BOOM
Dizelerin düz olması gerekmediğinden yararlanarak, 5x2'ye sıkıştırabiliriz:
BORFO
OMABO
Ancak karakterleri farklı dizeler arasında yeniden kullanarak daha da küçültebilir ve dizeleri 4x2'ye sığdırabiliriz:
FOOM
BARX
Şimdi B
her ikisi için kullanılır BOOM
ve BAR
ve OO
her ikisi için kullanılır BOOM
ve FOO
.
Test verisi
Gönderiminiz aşağıdaki 50 dizede test edilecektir. Test amacıyla, daha hızlı çalışacak olan bu verilerin daha küçük alt kümelerini kullanabilirsiniz. Bu test verileri için mutlak alt sınırın 120 karakterlik bir tahta olduğuna inanıyorum, ancak bu mutlaka gerçekleştirilemez.
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
Doğrulayıcı
Bir Boggle panosunun belirli bir listedeki tüm dizeleri içerip içermediğini doğrulamak için aşağıdaki Yığın Snippet'ini kullanabilirsiniz. Boggle arama kodunu edc65'in cevabından buraya taşıdım . Bir şey buggy görünüyorsa bana bildirin.