บทนำ:
ฉันมียันต์ต่าง ๆ มากมายที่เก็บไว้ในเอกสารที่ฉันเคยรวบรวมเมื่อตอนเป็นเด็กฉันเลือกบางอย่างที่ฉันคิดว่าเหมาะสมที่สุดสำหรับความท้าทาย ส่วนใหญ่ยังอยู่ในกล่องทรายและฉันยังไม่แน่ใจว่าฉันจะโพสต์พวกเขาทั้งหมดหรือเพียงไม่กี่ แต่นี่เป็นครั้งแรกที่พวกเขาจะเริ่มต้นสิ่งต่าง ๆ
คอมพิวเตอร์ Cipher จะเข้ารหัสข้อความให้เป็น 'สุ่ม' length
กลุ่มตัวละครที่ได้รับ หากกลุ่มดังกล่าวมีตัวเลขมันจะใช้ตัวเลขนั้นเพื่อจัดทำดัชนีลงในกลุ่มของตัวเองสำหรับอักขระที่เข้ารหัส หากไม่มีตัวเลขอยู่ในกลุ่มแสดงว่ามีการใช้อักขระตัวแรก
ตัวอย่างเช่นสมมติว่าเราต้องการที่จะเข้ารหัสข้อความที่มีความยาวที่กำหนดของthis is a computer cipher
5
นี่เป็นเอาต์พุตที่เป็นไปได้ (หมายเหตุ: ตัวเลขมีการจัดทำดัชนี 1 รายการในตัวอย่างด้านล่าง):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
ลองมาเป็นตัวอย่างสองสามกลุ่มเพื่ออธิบายวิธีถอดรหัสกลุ่ม:
qu5dt
กลุ่มนี้มีหลัก5
ดังนั้น (1 จัดทำดัชนี) ตัวละครที่ 5t
ของกลุ่มนี้เป็นตัวละครที่ใช้สำหรับข้อความถอดรหัส:hprit
h
กลุ่มนี้มีตัวเลขไม่ดังนั้นตัวอักษรตัวแรกของกลุ่มนี้จะถูกใช้โดยปริยายสำหรับข้อความที่ถอดรหัส:osyw2
: กลุ่มนี้ประกอบด้วยหลัก2
ดังนั้น (1 จัดทำดัชนี) ตัวละครที่ 2s
ของกลุ่มนี้เป็นตัวละครที่ใช้สำหรับข้อความถอดรหัส:
ท้าทาย:
กำหนดจำนวนเต็มlength
และสตริงword_to_encipher
เอาท์พุทสตริงเข้ารหัสแบบสุ่มตามที่อธิบายไว้ข้างต้น
คุณจะต้องเข้ารหัสlength
และword_to_encipher
ให้ดังนั้นจึงไม่จำเป็นต้องสร้างโปรแกรม / ฟังก์ชั่นการถอดรหัสเช่นกัน ฉันอาจทำข้อ 2 ในการถอดรหัสในอนาคต
กฏท้าทาย:
- คุณสามารถถือว่าจะอยู่ในช่วง
length
[3,9]
- คุณสามารถสันนิษฐานได้ว่า
word_to_encipher
จะมีเพียงตัวอักษร - คุณสามารถใช้ตัวพิมพ์เล็กเต็มหรือตัวพิมพ์ใหญ่เต็มรูปแบบ (โปรดระบุว่าคุณใช้คำตอบแบบใด
- เอาท์พุทของคุณทุกกลุ่มและตำแหน่งของตัวเลขในกลุ่ม (ถ้ามี) ที่ควรจะเหมือนกันแบบสุ่ม ดังนั้นตัวอักษรแบบสุ่มทั้งหมดของตัวอักษรจึงมีโอกาสเกิดขึ้นเหมือนกัน ตำแหน่งของจดหมายที่เข้ารหัสในแต่ละกลุ่มจะมีโอกาสเกิดขึ้นเช่นเดียวกัน และตำแหน่งของตัวเลขนั้นมีโอกาสเกิดขึ้นเท่ากัน (ยกเว้นเมื่อตัวอักษรตัวแรกและไม่มีตัวเลขอยู่และเห็นได้ชัดว่าไม่สามารถอยู่ในตำแหน่งเดียวกับตัวอักษรที่เข้ารหัส)
- คุณยังได้รับอนุญาตให้ใช้ตัวเลข 0 ดัชนีแทนดัชนี 1 ดัชนี โปรดระบุว่าคุณใช้คำตอบใดในสองข้อ
- ตัวเลข
1
(หรือ0
เมื่อดัชนี 0) จะไม่ปรากฏในผลลัพธ์ ดังนั้นจึงb1ndh
ไม่ใช่กลุ่มที่ถูกต้องที่จะเข้ารหัสอักขระ 'b' อย่างไรก็ตามb4tbw
เป็นที่ถูกต้องที่4
enciphersb
ที่ 4 ตำแหน่ง (1 จัดทำดัชนี) และตัวละครอื่น ๆb
,t
,w
เป็นแบบสุ่ม (ซึ่งบังเอิญยังมีb
) กลุ่มที่ถูกต้องอื่น ๆ เป็นไปได้ของlength
5 ถึงเข้ารหัสตัวอักษร 'B' คือ:abcd2
,ab2de
,babbk
,hue5b
ฯลฯ
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O ที่เป็นค่าเริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ:
Input:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
เดียวกันทั้งหมดหรือไม่ ยังb1akk
ถูกต้องหรือไม่
b1akk
ฉันจะบอกว่าไม่ จะแก้ไขในคำอธิบายการท้าทายเพื่อชี้แจง หากอักขระตัวแรกเป็นอักขระที่เข้ารหัสไม่ควรมีตัวเลขหลัก
"a??"
มีผลลัพธ์ที่เป็นไป 676 แต่"1a?"
, "?a1"
, "2?a"
, "?2a"
มี only104 ผล ดังนั้นถ้าฉันพยายามเลือกผลลัพธ์หนึ่งรายการจากผลลัพธ์ทั้งหมด 780 รายการการกระจายของ "ตำแหน่งของจดหมายที่เข้ารหัส" คือ 13: 1: 1 ไม่ใช่ 1: 1: 1 และฉันจะพิจารณาสิ่งนี้ว่า "สุ่มอย่างสม่ำเสมอ" ทำงานอย่างไร