พื้นหลัง
การแปลงแบบย้ายไปด้านหน้า (MTF) เป็นอัลกอริทึมการเข้ารหัสข้อมูลที่ออกแบบมาเพื่อปรับปรุงประสิทธิภาพของเทคนิคการเข้ารหัสแบบเอนโทรปี
ในอัลกอริทึมการบีบอัด bzip2จะถูกนำไปใช้หลังจากการแปลง Burrows – Wheeler (ดังที่เห็นในBurrows, Wheeler และ Back ) โดยมีวัตถุประสงค์เพื่อเปลี่ยนกลุ่มของอักขระซ้ำเป็นจำนวนเต็มจำนวนน้อยที่ไม่บีบอัดได้ง่าย
คำนิยาม
สำหรับจุดประสงค์ของการท้าทายนี้เราจะกำหนดเวอร์ชัน ASCII ที่พิมพ์ได้ของ MTF ดังนี้:
รับสายป้อนsใช้อาร์เรย์ที่ว่างเปล่าRสตริงงทุกตัวอักขระ ASCII (0x20 เพื่อ 0x7E) และทำซ้ำต่อไปนี้สำหรับตัวละครแต่ละตัวคของs :
ผนวกดัชนีของคในdเพื่อR
ย้ายcไปที่ด้านหน้าของdเช่นลบcจากdและเติมลงในส่วนที่เหลือ
สุดท้ายเราใช้องค์ประกอบของrเป็นดัชนีในd ต้นฉบับ และดึงอักขระที่เกี่ยวข้อง
ตัวอย่างทีละขั้นตอน
INPUT: "CODEGOLF"
0. s = "CODEGOLF"
d = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = []
1. s = "ODEGOLF"
d = "C !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35]
2. s = "DEGOLF"
d = "OC !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47]
3. s = "EGOLF"
d = "DOC !\"#$%&'()*+,-./0123456789:;<=>?@ABEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37]
4. s = "GOLF"
d = "EDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38]
5. s = "OLF"
d = "GEDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40]
6. s = "LF"
d = "OGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3]
7. s = "F"
d = "LOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45]
8. s = ""
d = "FLOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
r = [35 47 37 38 40 3 45 41]
OUTPUT: "COEFH#MI"
งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้งาน ASCII MTF ที่พิมพ์ได้ (ตามที่กำหนดไว้ด้านบน)
กรณีทดสอบ
Input: Programming Puzzles & Code Golf
Output: Prpi"do lp%((uz rnu&3!P/o&$U$(p
Input: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN BATMAN!
Output: Na! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !!"DDUP"%'
Input: Two more questions and I have bzip2 in less than 100 bytes!
Output: Twp#o"si$sv#uvq(u$(l#o#W!r%w+$pz,xF%#,"x(. #0--'$GG ".z(**:
กฎเพิ่มเติม
คุณไม่สามารถใช้โอเปอเรเตอร์ในตัวที่คำนวณ MTF ของสตริงได้
รหัสของคุณอาจพิมพ์ขึ้นบรรทัดใหม่หากคุณเลือก STDOUT สำหรับเอาท์พุท
รหัสของคุณจะต้องใช้งานได้กับอินพุตของอักขระ ASCII ที่พิมพ์ได้ 1,000 หรือน้อยกว่า (0x20 ถึง 0x7E)
บังคับใช้กฎกอล์ฟมาตรฐาน การส่งที่สั้นที่สุดในหน่วยไบต์ชนะ