ลักษณะ
Caesar Shift เป็นรหัสตัวเลขแบบ monoalphabetic ที่ง่ายมากโดยที่ตัวอักษรแต่ละตัวจะถูกแทนที่ด้วยตัวอักษรหนึ่งตัวตามด้วยตัวอักษร ตัวอย่าง:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
เป็นผลลัพธ์สำหรับความท้าทายที่แท้จริงนี่เป็นตัวอย่างของการเลื่อนที่ 1)
อย่างที่คุณเห็นระยะห่างและเครื่องหมายวรรคตอนยังคงไม่ได้รับผลกระทบ อย่างไรก็ตามเพื่อป้องกันการเดาข้อความตัวอักษรทั้งหมดจะเป็นตัวพิมพ์ใหญ่ เมื่อขยับตัวอักษรกลับข้อความจะถูกถอดรหัสสะดวก แต่ยังง่ายต่อการถอดรหัสโดยบุคคลอื่นที่ไม่ควรรู้ว่าข้อความนั้นหมายถึงอะไร
ดังนั้นเราจะช่วย Caesar นิดหน่อยโดยใช้รูปแบบขั้นสูงของรหัสของเขา: Self-shifting Caesar Shift !
ท้าทาย
งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ให้สายอักขระเข้ารหัสเอาท์พุทสตริงเข้ารหัสที่สอดคล้องกับอินพุต Caesar Shift ขั้นสูงทำงานได้ดังนี้:
1. Compute letter differences of all adjacent letters:
1.1. Letter difference is computed like this:
Position of 2nd letter in the alphabet
-Position of 1st letter in the alphabet
=======================================
Letter difference
1.2. Example input: Hello
H - e|e - l|l - l|l - o
7 - 5|5 - 12|12 - 12|12 - 15 Letter differences: 3; -7; 0; -3
=3| =-7| =0| =-3
2. Assign the letters continously a letter difference from the list,
starting at the second letter and inverting the differences:
2.1. 2nd letter: first difference, 3rd letter: second difference, etc.
2.2. The first letter is assigned a 1.
2.3. Example input: Hello with differences 3; -7; 0; -3
Letter || Value
=======||======
H || 1
E || -3
L || 7
L || 0
O || 3
3. Shift the letters by the value x they have been assigned:
3.1. In case of a positive x, the letter is shifted x letters to the right.
3.2. In case of a negative x, the letter is shifted |x| letters to the left.
3.3. In case of x = 0, the letter is not shifted.
3.4. If the shift would surpass the limits of the alphabet, it gets wrapped around
Example: Y + Shift of 2 --> A
3.5. Example input: See the table under 2.3.
|| || Shifted
Letter || Value || Letter
=======||=======||=========
H || 1 || I
E || -3 || B Program output:
L || 7 || S IBSLR
L || 0 || L
O || 3 || R
ช่องว่างและสัญลักษณ์พิเศษอื่น ๆ เช่นเครื่องหมายวรรคตอนจะถูกข้ามไปในกระบวนการนี้ มีการรับประกันว่าโปรแกรมของคุณจะได้รับสตริงที่มีอักขระ ASCII ที่พิมพ์ได้เท่านั้น ผลลัพธ์ของฟังก์ชัน / โปรแกรมของคุณจะต้องเป็นตัวพิมพ์ใหญ่เท่านั้น
นี่คือcode-golfดังนั้นช่องโหว่มาตรฐานจึงมีผลบังคับใช้และอาจเป็นคำตอบที่สั้นที่สุดในหน่วยไบต์!
ZEN
ยกตัวอย่างเช่น Z
เลื่อนโดย 1 คือ ... A
? (ตามด้านข้างคำตอบของ 05AB1E จะเปลี่ยนZ
เป็นA
)
RELIEF
และRELIES
เพื่อเข้ารหัสทั้งผลลัพธ์เดียวกันSRSFAG
หรือไม่
E
-3
เหรอ