Вызов
Задача состоит в том, чтобы зашифровать данную строку, используя правила, указанные ниже. Строка будет содержать только строчные буквы , цифры и / или пробелы .
Эквивалент персонажа
Теперь, во-первых, вам нужно знать, как найти «эквивалент» каждого персонажа.
Если символ является согласной, это способ найти его эквивалент:
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» являются эквивалентами друг друга, потому что «h», «t» находятся в 6-й позиции от начала и конца соответственно.
Для поиска эквивалента гласных / цифр используется та же процедура. Вы перечисляете все гласные или цифры (начиная с 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) Вы не должны рассматривать персонажа в одной и той же позиции дважды. Шаги должны быть выполнены, пока все символы на входе не будут покрыты.
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 "
Вы также можете использовать прописные буквы вместо строчных.
счет
Это код-гольф , поэтому выигрывает самый короткий код!
источник
Ответы:
JavaScript (Node.js) ,
173...166156...124123 байта-28 байт благодаря арно
Попробуйте онлайн!
На первой итерации переменная
String
будет изменена наArray
, а последующие итерации продолжат использоватьArray
. Вуаля!Оригинальный подход (166 байт):
источник
&
не работал для некоторых номеров, но&&
работал. Благодарю.q=="0"|+q
на самом деле на 1 байт корочеq>" "&&1/q
.05AB1E , 22 байта
Попробуйте онлайн! или как тестовый набор
объяснение
источник
žhžMžN)UvćXJXíJ‡D?žMsåiR
было то, что я думал об улучшении, но не могу сократитьXJXiJ
достаточно.DJsíJ
которая тоже не была очень эффективной.C 196 байтов
Попробуйте онлайн!
источник
J , 132 байта
Попробуйте онлайн!
На этот раз подробный явный глагол.
Объяснение:
c=.(u:97+i.26)
делает список азv=.'aeiou'
составляет список гласных-.
убирает гласные из списка буквd=.u:48+i.10
составляет список цифрg=.;"0|.
служебный глагол для создания списка в штучной упаковке пар символов заменыa=.''
список для сохранения результатаwhile.*#y do.a=.a,{.y rplc(g c),(g d),g v
длина списка> 0, взять символ, заменить его и добавить к результатуy=.|.^:({:a e.v)}.y
удалить один символ из начала списка и, если символ является гласным, перевернуть списокend.
заканчиваетwhile
циклa
возвращает результатисточник
Чистый ,
221206198190186178 байтПопробуйте онлайн!
источник
Сетчатка , 78 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Поменяйте местами каждый символ с его эквивалентом.
Повторите, пока гласная остается.
Вывести текст до гласной.
Удалить текст до гласной.
Переверните оставшийся текст. Когда не осталось гласных, это затем неявно выводится, однако для целей тестовых случаев заголовок выводит текст в конце каждой строки.
источник
Stax , 24 байта
Запустить его
Вот представление ascii той же программы.
Сначала он переводит каждый класс символов, а затем начинает цикл while. В цикле он выводит следующий символ и условно переворачивает остальную часть строки, если встречается гласная.
источник