Non-Palindromic Polyglot Boggle 에서 작업 할 때 두 줄로도 Boggle 보드에 코드를 가능한 효율적으로 포장하는 것이 지루하다는 것을 알았습니다. 그러나 우리는 프로그래머입니다. 우리는 물건을 자동화하는 방법을 알고 있습니다.
문자열 목록이 주어지면 각 문자열을 찾을 수있는 Boggle 보드를 생성해야합니다 (다른 문자열과 독립적으로). 도전은 Boggle 보드를 가능한 작게 만드는 것입니다. 이것이 어려운 작업이기 때문에 이것은 코드 도전입니다 . 최적화에 대한 요구 사항은 없습니다. 도전은 가능한 한 잘하는 것입니다.
규칙
- Boggle 보드는 직사각형이며 대문자 만 포함합니다. 따라서 입력 문자열에는 대문자 만 포함됩니다.
- 일반적인 Boggle 규칙이 적용됩니다. 문자열은 어디에서나 시작하여 인접한 문자 (수평, 수직 또는 대각선)로 반복해서 이동하여 문자열을 찾을 수있는 경우 보드의 일부입니다. 단일 문자열을 형성하기 위해 보드의 셀을 두 번 이상 사용할 수 없습니다. 그러나 다른 문자열간에 문자를 재사용 할 수 있습니다.
- 테스트 데이터를 처리하는 데 30 분이 소요되며 코드에서 4GB 이상의 메모리를 사용해서는 안됩니다. 메모리 한도에 약간의 여유가 있지만 프로그램이 지속적으로 4GB 이상을 사용하거나 그보다 훨씬 높은 스파이크를 사용하는 경우 (일시적으로) 실격 처리됩니다.
- Windows 8을 실행하는 내 컴퓨터에서 모든 제출을 테스트합니다. Ubuntu VM이 있지만 테스트해야 할 경우 30 분을 최대한 활용할 수 없습니다. 선택한 언어에 대한 무료 통역사 / 컴파일러 링크와 코드 컴파일 / 실행 방법에 대한 지침을 포함하십시오.
- 점수는 아래의 테스트 데이터에 대한 Boggle 보드의 크기입니다 (줄 바꿈 제외). 동점 인 경우 (예 : 여러 사람이 최적의 솔루션을 생산할 수 있었기 때문에) 최적의 솔루션을 더 빨리 생성하는 제출자가 승자가됩니다.
- 테스트 데이터에 맞게 코드를 최적화해서는 안됩니다. 본인이 의심하는 경우 새 테스트 데이터를 생성 할 권리가 있습니다.
예
주어진 문자열
FOO
BAR
BOOM
한 번 사소하게 4x3 Boggle 보드에 넣을 수 있습니다.
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 보드에 주어진 목록의 모든 문자열이 포함되어 있는지 확인할 수 있습니다. 여기 edc65의 답변 에서 Boggle 검색 코드를 이식했습니다 . 문제가있는 것 같으면 알려주십시오.