Під час роботи над непаліндромним поліглотним баггом , я вважав, що досить нудно упаковувати коди максимально ефективно на платі Boggle, навіть лише з двома рядками. Але ми програмісти, правда? Ми знаємо, як автоматизувати речі.
Подаючи список рядків, ви повинні створити дошку Boggle, на якій можна знайти кожну з цих рядків (незалежно від інших). Завдання полягає в тому, щоб зробити дошку Boggle якомога меншою. Оскільки це (сподіваємось) досить складне завдання, це виклик коду : не потрібно вимоги до оптимальності - завдання полягає в тому, щоб зробити це так добре, як ви можете.
Правила
- Дошка Boggle буде прямокутною і міститиме лише великі літери. Тому рядки введення також будуть містити лише великі літери.
- Застосовуються звичайні правила Boggle: рядок є частиною дошки, якщо, починаючи з будь-якого місця, ви можете знайти рядок, повторно переходячи до сусідніх символів (по горизонталі, вертикалі чи по діагоналі). Щоб утворити єдиний рядок, ви не можете використовувати жодну комітку дошки більше одного разу. Однак символи можуть бути повторно використані між різними рядками.
- У вас є 30 хвилин для обробки тестових даних, і ваш код не повинен використовувати більше 4 Гб пам'яті. Я дам трохи свободи на обмеження пам’яті, але якщо ваша програма послідовно використовує більше 4 Гб або значно перевищує ширину, я (тимчасово) її дискваліфікую.
- Я перевіряю всі подання на власній машині, на якій працює Windows 8. У мене є Ubuntu VM, але якщо мені доведеться перевірити це, ви не зможете максимально використати 30 хвилин, як інакше. Будь ласка, включіть посилання на безкоштовний перекладач / компілятор для обраної вами мови, а також інструкції, як скласти / запустити свій код.
- Ваш результат буде розміром дошки Boggle для наведених нижче тестових даних (без урахування нових рядків). У випадку нерівності (наприклад, тому, що кільком людям вдалося створити оптимальне рішення), переможцем стане подання, яке швидше виробляє це оптимальне рішення.
- Ви не повинні оптимізувати свій код спеціально для даних тесту. Якщо я підозрюю когось у цьому, я залишаю за собою право генерувати нові тестові дані.
Приклад
З огляду на рядки
FOO
BAR
BOOM
Як тільки можна було б тривіально помістити їх у плату "Бггл" 4x3:
FOOX
BARX
BOOM
Скориставшись тим, що рядки не повинні бути прямими, ми можемо стиснути його до 5x2:
BORFO
OMABO
Але ми можемо зробити його ще меншим, повторно використовуючи символи між різними рядками, і розмістити рядки в 4x2:
FOOM
BARX
Тепер B
використовується як для, BOOM
і BAR
, і OO
використовується для обох BOOM
і FOO
.
Дані тесту
Ваша робота буде перевірена на наступних 50 рядках. Для тестування ви можете просто використовувати менші підмножини цих даних, які потім повинні працювати швидше. Я вважаю, що абсолютна нижня межа для цих тестових даних - це дошка з 120 символами, хоча це не обов'язково досяжно.
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
Верифікатор
Ви можете використовувати наступний фрагмент стека, щоб перевірити, чи містить дошка Boggle всі рядки в заданому списку. Я переніс код пошуку Boggle з відповіді edc65 тут . Дайте мені знати, якщо щось здається баггі.