บทนำ
ในการท้าทายนี้คุณจะได้รับการแก้ไข Burrows-Wheeler ในแนวทแยง นี่คือภาพรวมทั่วไปของการเปลี่ยนรูป Burrows-Wheeler ในแนวทแยง ในการเข้ารหัสข้อความคุณต้องรับประกันว่าข้อความนั้นยาวแปลก (เช่น 5, 7, 9 ฯลฯ ) จากนั้นคุณสร้างกริดn
โดยn
ที่n
ความยาวของข้อความอยู่ที่ไหน แถวแรกคือข้อความต้นฉบับ แต่ละแถวหลังจากนั้นคือแถวด้านบน แต่เลื่อนไปทางซ้าย 1 อักขระโดยที่อักขระตัวแรกเลื่อนไปทางด้านหลัง ตัวอย่างเช่น:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
จากนั้นคุณนำตัวอักษรแต่ละตัวไปตามแนวทแยงมุมของ NW ถึง SE และใส่ลงในสตริงใหม่:
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
HloWrdel ol
ข้อความที่เข้ารหัสของคุณคือ หากต้องการถอดรหัสอันดับแรกให้ใช้ความยาวของข้อความที่เข้ารหัสเพิ่ม 1 และหารด้วย 2 ให้โทรไปยังหมายเลขx
นี้ ตอนนี้เรารู้x
แล้วว่าเริ่มจากตัวอักษรตัวแรกตัวอักษรแต่ละตัวจะอยู่x
หลังตัวอักษรสุดท้ายวนไปรอบ ๆ ตัวอย่างเช่น:
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
ตอนนี้เพียงแค่จัดเรียงตัวอักษรในลำดับที่ถูกต้องเพื่อให้ได้Hello World
!
ท้าทาย
ความท้าทายของคุณคือการเขียนโปรแกรมฟังก์ชั่นหรือหนึ่งในสองโปรแกรม อย่างไรก็ตามทั้งสองจะต้องใช้ภาษาเดียวกัน โปรแกรมแรกจะยอมรับสตริงเป็นอินพุตผ่าน STDIN อาร์กิวเมนต์ของโปรแกรมหรือพารามิเตอร์ฟังก์ชันและเข้ารหัสโดยใช้วิธีนี้ โปรแกรมที่สองจะยอมรับสตริงเป็นอินพุตผ่าน STDIN อาร์กิวเมนต์ของโปรแกรมหรือพารามิเตอร์ฟังก์ชันและถอดรหัสโดยใช้วิธีนี้
ความต้องการ
โปรแกรม / ฟังก์ชั่นแรก
- อินพุตสตริงเดี่ยวโดยใช้วิธีการใด ๆ ที่ระบุไว้ข้างต้น
- ต้องเข้ารหัสสตริงโดยใช้รูปแบบการแปลง Burrows-Wheeler ในแนวทแยง
โปรแกรม / ฟังก์ชั่นที่สอง
- อินพุตสตริงเดี่ยวโดยใช้วิธีการใด ๆ ที่ระบุไว้ข้างต้น
- ต้องถอดรหัสสตริงโดยใช้รูปแบบการแปลง Burrows-Wheeler ในแนวทแยง
ข้อ จำกัด
- คุณไม่สามารถใช้ฟังก์ชันในตัวหรือภายนอกที่ทำงานนี้ให้สำเร็จ
- ไม่อนุญาตช่องโหว่มาตรฐาน
- โปรแกรม / ฟังก์ชั่นทั้งสองจะต้องเป็นภาษาเดียวกัน
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ
หากฉันต้องการเพิ่มข้อมูลเพิ่มเติมแสดงความคิดเห็น!