チャレンジ
課題は、以下に指定されているルールを使用して、特定の文字列を暗号化することです。文字列には、小文字のアルファベット、数字、および/または空白のみが含まれます。
キャラクターと同等
さて、まず、各キャラクターの「同等」を見つける方法を知る必要があります。
文字が子音である場合、これは同等の検索方法です。
1) List all the consonants in alphabetical order
b c d f g h j k l m n p q r s t v w x y z
2) Get the position of the consonant you are finding the equivalent of.
3) The equivalent is the consonant at that position when starting from the end.
例:「h」と「t」はそれぞれ開始と終了から6番目の位置にあるため、「h」と「t」は互いに同等です。
母音/数字に相当するものを見つけるには、同じ手順に従います。すべての母音または数字(0から始まる)を順番にリストし、同等のものを見つけます。
以下は、すべての文字に相当するもののリストです。
b <-> z
c <-> y
d <-> x
f <-> w
g <-> v
h <-> t
j <-> s
k <-> r
l <-> q
m <-> p
n <-> n
a <-> u
e <-> o
i <-> i
0 <-> 9
1 <-> 8
2 <-> 7
3 <-> 6
4 <-> 5
暗号化のルール
1)左から移動を開始し、右に向かいます。
2)文字が子音/数字の場合、それと同等のものが取得され、空白の場合は空白が取得されます。
3)キャラクターが母音の場合、それと同等のものを取り、反対方向に動き始めます。たとえば、右に移動して母音に遭遇した場合、その文字を暗号化してから、右端の暗号化されていない文字にスキップし、左方向の暗号化を開始します。
4)同じ位置にいるキャラクターを2回考慮するべきではありません。入力のすべての文字がカバーされるまで、この手順に従う必要があります。
5)入力(空白を含む)の合計文字数は、出力の合計文字数と等しくなければなりません。
暗号化された文字は、暗号化された順序で出力に表示されることに注意してください。
では、文字列を暗号化してみましょう。
String = "tre d1go3t is"
Moving left to right
"t" -> "h"
"r" -> "k"
"e" -> "o"
Vowel encountered. Now moving right to left.
"s" -> "j"
"i" -> "i"
Vowel encountered. Now moving left to right.
" " -> " "
"d" -> "x"
"1" -> "8"
"g" -> "v"
"o" -> "e"
Vowel encountered. Now moving right to left.
" " -> " "
"t" -> "h"
"3" -> "6"
Output -> "hkoji x8ve h6"
例
"flyspy" -> "wqcjmc"
"hero" -> "toek"
"heroic" -> "toyike"
"ae" -> "uo"
"abe" -> "uoz"
"the space" -> "htoo jmuy"
"a d1g13t" -> "uh68v8x "
"we xi12" -> "fo78i d"
"this is a code" -> "htioj ixej uy "
小文字の代わりに大文字のアルファベットを使用することもできます。
得点
これはcode-golfなので、最短のコードが勝ちです!