บทนำ:
ฉันมียันต์ต่าง ๆ มากมายที่เก็บไว้ในเอกสารที่ฉันเคยรวบรวมเมื่อตอนเป็นเด็กฉันเลือกบางอย่างที่ฉันคิดว่าเหมาะสมที่สุดสำหรับความท้าทาย ส่วนใหญ่ยังอยู่ในกล่องทรายและฉันยังไม่แน่ใจว่าฉันจะโพสต์พวกเขาทั้งหมดหรือเพียงไม่กี่ นี่คืออันที่สอง (รหัสคอมพิวเตอร์เป็นอันแรกที่ฉันโพสต์)
สำหรับTrifid Cipher (โดยไม่ต้องใช้คำสำคัญ) ตัวอักษร (และไวด์การ์ดเพิ่มเติม) จะถูกแบ่งออกเป็นสาม 3 โดย 3 ตาราง:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
ข้อความที่เราต้องการเข้ารหัสคืออักขระตัวแรกโดยอักขระที่เข้ารหัสเป็นตัวเลขแถวของคอลัมน์ ตัวอย่างเช่นข้อความthis is a trifid cipher
กลายเป็น:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
จากนั้นเราใส่ทุกอย่างลงในแต่ละแถวทีละแถวในตารางด้านบนเป็นกลุ่มที่สาม:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
และสิ่งเหล่านั้นจะถูกเปลี่ยนกลับไปเป็นตัวละครโดยใช้ตารางเดียวกัน:
s y y z a g d d y y u i q u z w u u h u y o
สิ่งหนึ่งที่ควรทราบความยาวอินพุตควรเป็น coprime ถึง 3 ดังนั้นหากความยาวคือหลายเท่าของ 3 เราจะผนวกช่องว่างต่อท้ายหนึ่งหรือสองช่องเพื่อทำให้ความยาวอินพุตไม่เท่ากับ 3 อีกต่อไป
ท้าทาย:
รับสตริงsentence_to_encipher
เข้ารหัสตามที่อธิบายไว้ข้างต้น
คุณต้องเข้ารหัสsentence_to_encipher
เท่านั้นดังนั้นไม่จำเป็นต้องสร้างโปรแกรม / ฟังก์ชันถอดรหัสอีกด้วย ฉันอาจจะทำการท้าทายส่วนที่ 2 สำหรับการถอดรหัสในอนาคตอย่างไรก็ตาม (แม้ว่าฉันจะรู้สึกว่ามันไม่สำคัญ / คล้ายกับกระบวนการเข้ารหัส)
กฏท้าทาย:
- คุณสามารถสันนิษฐานได้ว่า
sentence_to_encipher
จะมีเพียงตัวอักษรและช่องว่าง - คุณสามารถใช้ตัวพิมพ์เล็กเต็มหรือตัวพิมพ์ใหญ่เต็มรูปแบบ (โปรดระบุว่าคุณใช้ตัวใดในคำตอบของคุณ)
- คุณสามารถเลือกที่จะผนวกช่องว่างต่อท้ายหนึ่งหรือสองต่อท้ายเมื่อความยาวอินพุตเท่ากับ 3 เพื่อทำให้ไม่เป็น 3 เท่าของอีกต่อไป
- I / O ยืดหยุ่นได้ ทั้งอินพุตและเอาต์พุตสามารถเป็นสตริงรายการ / อาร์เรย์ / สตรีมของอักขระเป็นต้น
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีพร้อมพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)