นี่คือตัวอักษรของตัวอักษรภาษาอังกฤษตามลำดับความถี่:
e t a o i n s h r d l c u m w f g y p b v k j x q z
นั่นคือe
เป็นจดหมายที่ใช้บ่อยที่สุดและz
เป็นจดหมายที่พบน้อยที่สุด (ข้อมูลจากWikipedia )
ความท้าทายของคุณคือการใช้ข้อความ ROT-n'd เช่น:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
นี่คือข้อความ "นี่คือทุกสิ่งที่ส่งมาถึงความพึงพอใจของคุณปลอดภัย" ซึ่ง "เข้ารหัส" ผ่าน ROT-21 (ครึ่งหนึ่งของ 42) โปรแกรมของคุณที่ใช้ตารางความถี่ด้านบนควรสามารถกำหนดได้ว่าอักขระแต่ละตัวถูกหมุนและข้อความต้นฉบับเท่าใด
(หากคุณไม่คุ้นเคยกับ ROT-n มันจะเปลี่ยนอักขระแต่ละตัวเป็นหลักn
เช่นใน ROT-2,. a -> c, b -> d, ..., x -> z, y -> a, z -> b
)
คุณถามอย่างไร อัลกอริทึม (ไร้เดียงสามาก) ที่คุณต้องใช้คือ:
- สำหรับแต่ละ
n
ตั้งแต่0
ถึง25
รวมให้ใช้ ROT--n
กับสตริงอินพุต (เป็นลบn
เพราะเราต้องการย้อนกลับการเข้ารหัส ROT--n
เทียบเท่ากับ ROT-26-n
ถ้าทำได้ง่ายกว่านี้) - แปลงแต่ละอินพุตสตริงเป็นตัวเลขโดยการเพิ่มความถี่สัมพัทธ์ของอักขระ
e
is0
,t
is1
,a
is2
, etc. ตัวอย่างเช่นจำนวนที่สอดคล้องกันของสตริง"hello"
คือ 7 + 0 + 10 + 10 + 3 = 30 - ค้นหาสตริงที่มีตัวเลขที่ต่ำที่สุด
n
ผลลัพธ์ที่สตริงและสอดคล้องกัน
กฎ:
- อินพุตสามารถทำได้ทุกที่ที่เหมาะสม (STDIN, อาร์กิวเมนต์ของฟังก์ชั่น, จากไฟล์, ฯลฯ ) และสามารถส่งออกได้ (STDOUT, ค่าส่งคืนของฟังก์ชัน, ไปยังไฟล์, ฯลฯ )
- คุณอาจใช้อัลกอริทึมที่แตกต่างกันตราบใดที่มันให้ผลลัพธ์ที่เหมือนกันเสมอ ตัวอย่างเช่นการมีค่า
z
เป็น 0 และe
25 และการเลือกจำนวนสูงสุดก็ไม่เป็นไร - หากสองสายมีคะแนนเท่ากันคุณสามารถเลือกที่จะแสดงผลออกมาหนึ่งหรือทั้งสอง นี่เป็นกรณีที่เป็นขอบและคุณไม่จำเป็นต้องคิดค่าใช้จ่าย
- นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!
กรณีทดสอบ:
อินพุต: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
เอาต์พุต:21 thisisaverysecretmessagethatisverysecureandsafe
อินพุต: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
เอาต์พุต:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
อินพุต: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
เอาต์พุต:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
อินพุต: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
เอาต์พุต:2 hereisthefinaltestcasethatyoumustdecrypt
ในกรณีที่คุณสงสัยนี่คือ JSFiddle ของรหัสทดสอบ JavaScript ที่ฉันเขียนซึ่งประสบความสำเร็จในการถอดรหัสกรณีทดสอบทั้งหมดที่ฉันโยนไป
wtaad
ควรให้0 wtaad
ผลลัพธ์และvszzc
ควรให้25 wtaad
ผลลัพธ์