เมื่อทำงานกับNon-Palindromic Polyglot Boggleฉันพบว่ามันค่อนข้างน่าเบื่อที่จะบรรจุรหัสอย่างมีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้บนบอร์ดเกรงขามแม้จะมีเพียงสองสาย แต่เราเป็นโปรแกรมเมอร์ใช่ไหม เรารู้วิธีทำให้สิ่งต่างๆเป็นไปโดยอัตโนมัติ
รับรายการสตริงคุณจะต้องสร้างบอร์ดเกรงกลัวที่แต่ละสตริงสามารถพบได้ (เป็นอิสระจากคนอื่น ๆ ) ความท้าทายคือการทำให้กระดานเกรงกลัวมีขนาดเล็กที่สุดเท่าที่จะทำได้ เนื่องจากนี่คือ (หวังว่า) เป็นงานที่ค่อนข้างยากนี่เป็นความท้าทายของรหัส : ไม่มีข้อกำหนดสำหรับการเพิ่มประสิทธิภาพ - ความท้าทายคือการทำมันให้ดีที่สุดเท่าที่จะทำได้
กฎระเบียบ
- บอร์ดเกรงกลัวจะเป็นรูปสี่เหลี่ยมผืนผ้าและมีตัวอักษรตัวพิมพ์ใหญ่เท่านั้น ดังนั้นสตริงอินพุตจะมีเฉพาะตัวอักษรตัวพิมพ์ใหญ่เท่านั้น
- ใช้กฎการเกรงกลัวตามปกติ: สตริงเป็นส่วนหนึ่งของบอร์ดหากเริ่มต้นที่ใดก็ได้คุณสามารถค้นหาสตริงโดยการย้ายไปยังอักขระที่อยู่ติดกันซ้ำ ๆ (แนวนอนแนวตั้งหรือแนวทแยงมุม) ในการสร้างสตริงเดี่ยวคุณไม่สามารถใช้เซลล์ใด ๆ ของบอร์ดมากกว่าหนึ่งครั้ง อย่างไรก็ตามตัวละครอาจถูกนำมาใช้ซ้ำระหว่างสตริงที่แตกต่างกัน
- คุณมีเวลา 30 นาทีในการประมวลผลข้อมูลทดสอบและรหัสของคุณจะต้องไม่ใช้หน่วยความจำเกิน 4 GB ฉันจะให้ระยะเพิ่มขึ้นเล็กน้อยบนขีด จำกัด หน่วยความจำ แต่ถ้าโปรแกรมของคุณใช้มากกว่า 4 GB หรือ spikes อยู่เหนือมันอย่างมีนัยสำคัญฉันจะ (ชั่วคราว) ตัดสิทธิ์การใช้งาน
- ฉันจะทดสอบการส่งทั้งหมดในเครื่องของตัวเองซึ่งใช้ Windows 8 ฉันมี Ubuntu VM แต่ถ้าฉันต้องทดสอบว่าคุณจะไม่สามารถใช้งานได้มากเท่าที่ 30 นาที โปรดรวมลิงก์ไปยังล่าม / คอมไพเลอร์ฟรีสำหรับภาษาที่คุณเลือกรวมถึงคำแนะนำเกี่ยวกับวิธีการรวบรวม / เรียกใช้รหัสของคุณ
- คะแนนของคุณจะเป็นขนาดของบอร์ดเกรงกลัวสำหรับข้อมูลการทดสอบด้านล่าง (ไม่นับบรรทัดใหม่) ในกรณีของการเสมอกัน (เช่นเนื่องจากหลายคนจัดการเพื่อสร้างทางออกที่ดีที่สุด) ผู้ชนะจะเป็นผู้ส่งที่สร้างโซลูชันที่ดีที่สุดนี้เร็ว
- คุณต้องไม่ปรับรหัสของคุณให้ตรงกับข้อมูลการทดสอบ หากฉันสงสัยว่ามีใครทำเช่นนั้นฉันขอสงวนสิทธิ์ในการสร้างข้อมูลทดสอบใหม่
ตัวอย่าง
รับสาย
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
ตรวจสอบ
คุณสามารถใช้ Stack Snippet ต่อไปนี้เพื่อตรวจสอบว่าบอร์ดเกรงกลัวมีสตริงทั้งหมดในรายการที่กำหนด ฉันย้ายรหัสค้นหาเกรงกลัวจากคำตอบของ edc65 ตรงนี้ แจ้งให้เราทราบหากมีสิ่งใดที่ดูเหมือนว่าบั๊กกี้