説明
シーザーシフトは非常に単純な単一アルファベット暗号で、アルファベットの各文字がその後の文字に置き換えられます。例:
Hello world! -> IFMMP XPSME!
(IBSLR, EGUFV!
実際のチャレンジの出力です。これは1シフトした例です。)
ご覧のとおり、間隔と句読点は調整されていません。ただし、メッセージの推測を防ぐため、すべての文字は大文字です。文字を戻すことで、メッセージは解読され、便利になりましたが、メッセージの意味を知らないはずの人が解読するのも簡単です。
そこで、高度な形式の暗号を使用して、Caesarを少し支援します:Self-shifting 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
?