Açıklama
Bir Sezar Kayması, her harfin alfabedeki bir harfle değiştirildiği çok basit bir monoalfabetik şifredir. Misal:
Hello world! -> IFMMP XPSME!
( IBSLR, EGUFV!
asıl zorluğun çıktısı budur. 1'e geçişin bir örneğiydi.)
Gördüğünüz gibi, boşluk ve noktalama işaretleri dikkate alınmaz. Ancak, mesajı tahmin etmeyi önlemek için tüm harfler büyük yazılır. Harfleri geri kaydırarak mesaj deşifre edildi, kullanışlı, ancak mesajın ne anlama geldiğini bilmemesi gereken diğer kişiler tarafından deşifre edilmesi gerçekten kolay oldu.
Yani, şifrelerinin gelişmiş bir biçimini kullanarak Sezar'a biraz yardım edeceğiz: Kendini değiştiren Sezar Kayması !
Meydan okuma
Göreviniz, şifreleyiciye bir dize verildiğinde, girdiye karşılık gelen şifreli dize çıktısı veren bir program veya işlev yazmaktır. Gelişmiş Sezar Kayması şöyle çalışır:
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
Bu işlemde boşluklar ve noktalama işaretleri gibi diğer özel simgeler atlanır. Programınıza yalnızca yazdırılabilir ASCII karakterleri içeren bir dize verileceği garanti edilir. İşlevinizin / programınızın çıktısı yalnızca büyük harf olmalıdır.
Bu kod golf , bu yüzden standart boşluklar geçerlidir ve bayttaki en kısa cevap kazanabilir!
ZEN
, mesela. Z
1 ile kaydırılır ... A
? (Bir yan not olarak, 05AB1E cevap dönüşler Z
içine A
)
RELIEF
ve RELIES
aynı sonuca hem encipher için SRSFAG
?
E
-3
mi?