ท้าทาย
งานของคุณคือการเข้ารหัสจำนวนเต็มเป็นสตริงของอักขระ ASCIIจากนั้นถอดรหัสสำเร็จหลังจากสตริงดังกล่าวได้รับการสับแบบสุ่ม
คุณจะเขียนสองโปรแกรม / ฟังก์ชั่นซึ่งจะถูกเรียกว่าเข้ารหัสและถอดรหัส
Encoder
- การป้อนข้อมูล:จำนวนเต็มในช่วง ]
- เอาต์พุต:สตริงของอักขระ ASCII (ไม่จำเป็นต้องพิมพ์ได้)
ถอดรหัส
- การป้อนข้อมูล:สุ่มการเปลี่ยนแปลงของสตริงs
- เอาท์พุท:จำนวนเต็มn
เกณฑ์การให้คะแนน
ให้เป็นความยาวสูงสุดของsข้ามค่าที่เป็นไปได้ทั้งหมดของn ถ้าตัวเข้ารหัสทำหน้าที่ไม่ได้กำหนดไว้ล่วงหน้า (ซึ่งได้รับอนุญาตให้ดูด้านล่าง) จากนั้นAจะเป็นความยาวสูงสุดของsที่อาจเกิดขึ้น (อาจ∞ )
ให้เป็นความยาวของตัวเข้ารหัสในหน่วยไบต์และคือความยาวของตัวถอดรหัสในหน่วยไบต์
แล้วคะแนนของคุณเป็น⋅ ( L E + L D )
ชัยชนะที่ได้รับรางวัลในการยื่นคะแนนต่ำสุด
เวลาที่ จำกัด
มีข้อจำกัดเกี่ยวกับเวลาในการดำเนินการของEncoderและDecoderสำหรับการทดสอบครั้งเดียว (เช่นค่าเดียวคือ )
เป้าหมายคือเพื่อหลีกเลี่ยงวิธีการแก้ปัญหาที่พบว่ากำลังดุร้ายเข้ารหัสโดยการระบุลำดับทั้งหมดด้วยคุณสมบัติบางอย่าง หากวิธีการแก้ปัญหาของคุณทำอะไรที่ฉลาดกว่านั้นก็น่าจะพอดีกับข้อ จำกัด เวลาและจะถือว่าถูกต้อง เช่นเดียวกันหากใช้งานได้กับTIOสำหรับค่าที่เลือกแบบสุ่มของจะถือว่าใช้งานได้ มิฉะนั้นฉันจะทดสอบบนเครื่องของฉัน แต่โปรดทราบว่าหากวิธีการแก้ปัญหาของคุณคือแรงเดรัจฉานบริสุทธิ์มันจะล้มเหลวเกือบแน่นอน
กฎระเบียบ
- เข้ารหัสและถอดรหัสจะต้องเขียนในภาษาเดียวกัน
- ถอดรหัสต้องส่งออกที่ถูกต้องจำนวนเต็มสำหรับการเปลี่ยนแปลงเป็นไปได้ทุกของสตริงส่งกลับโดยEncoder
- เข้ารหัสและถอดรหัสจะไม่ได้รับอนุญาตให้ใช้ข้อมูลร่วมกันในทางใด ๆ (เช่นโดยวิธีการของตัวแปรทั่วโลกหรือไฟล์)
- การส่งออกของEncoderต้องไม่เป็นที่กำหนด (นั่นคือการป้อนข้อมูลเดียวกันอาจผลิตสตริงเอาท์พุทที่แตกต่างกันถ้าEncoderจะดำเนินการหลายครั้ง) แต่ถอดรหัสมักจะต้องเดาถูกต้องจำนวนเต็มn
- เข้ารหัสและถอดรหัสอาจใช้เวลาและกลับจำนวนเต็มในวิธีที่สะดวกใด ๆ (เช่นถ้ามันเป็นเรื่องปกติสำหรับการป้อนข้อมูลที่จะเป็น
14
,"14"
หรือ[1,4]
) - Encoderอาจเอาท์พุทสตริงทั้งโดยการพิมพ์บน
stdout
หรือโดยการกลับสตริงรายการ / อาร์เรย์ของตัวอักษรหรือรายการ / อาร์เรย์ของจำนวนเต็มในช่วง ; ทราบว่าถอดรหัสจะได้รับเป็น input การเปลี่ยนแปลงของที่ส่งกลับโดยEncoderดังนั้นจึงควรยอมรับสตริงในรูปแบบเดียวกันเป็นs - ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- หากเป็นไปได้ให้อธิบายวิธีการทำงานของรหัสของคุณและเหตุผลที่คะแนนที่คุณอ้างนั้นถูกต้อง
ตัวอย่าง
สมมติ 14
- ตัวเข้ารหัสได้รับ
14
เป็นอินพุต"qwerty"
มันส่งออกเดือนพฤษภาคม- ถอดรหัสได้รับการเปลี่ยนแปลงของ
"qwerty"
เป็น input"tweyqr"
ตัวอย่างเช่น มันจะต้องส่งออก14
(ในรูปแบบที่สะดวก)
Encoderจะได้กลับมา[113,119,101,114,116,121]
เป็นอย่างดีซึ่งในกรณีถอดรหัสจะได้รับ [116,119,101,121,113,114]
(ตัวอย่างเช่น)
โปรดทราบว่าสตริงที่ส่งคืนโดยEncoderอาจมีอักขระ ASCII ที่ไม่สามารถพิมพ์ได้ (แต่มักจะอยู่ในช่วง[0x00, ..., 0x7F]
)