Desafio
O desafio é criptografar uma determinada sequência, usando as regras especificadas abaixo. A sequência conterá apenas letras minúsculas , dígitos e / ou espaços em branco .
Equivalente a um personagem
Agora, primeiro você precisaria saber como encontrar o "equivalente" de cada personagem.
Se o personagem é uma consoante, esta é a maneira de descobrir que é equivalente:
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.
por exemplo: 'h' e 't' são equivalentes entre si porque 'h', 't' estão na 6ª posição do início e do fim, respectivamente.
O mesmo procedimento é seguido para encontrar o equivalente a vogais / dígitos. Você lista todas as vogais ou dígitos (começando em 0) em ordem e encontra o equivalente.
Dada a seguir, é apresentada a lista dos equivalentes de todos os caracteres:
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
Regras de criptografia
1) Você começa a se mover da esquerda e vai para a direita.
2) Se o caractere for uma consoante / dígito, seu equivalente será utilizado e, se for um espaço em branco, será utilizado um espaço em branco.
3) Se o personagem é uma vogal, você pega o equivalente e começa a se mover na direção oposta. Por exemplo, se você estiver se movendo para a direita e encontrar uma vogal, criptografe esse caractere, pule para o caractere não criptografado mais à direita e comece a criptografar na direção esquerda e vice-versa.
4) Você não deve considerar um personagem na mesma posição duas vezes. As etapas devem ser seguidas até que todos os caracteres na entrada sejam cobertos.
5) O número total de caracteres na entrada (incluindo espaços em branco) deve ser igual ao número total de caracteres na saída.
Observe que os caracteres criptografados aparecem na saída na ordem em que foram criptografados.
Agora, deixe-me criptografar uma string para você.
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"
Exemplos
"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 "
Você também pode optar por usar letras maiúsculas em vez de letras minúsculas.
Pontuação
Isso é código-golfe , então o código mais curto vence!
fonte
Respostas:
JavaScript (Node.js) ,
173...166156...124123 bytes-28 byte Obrigado Arnauld
Experimente online!
Na primeira iteração, a
String
alteração será alterada paraArray
e as iterações subsequentes continuarão sendo usadasArray
. Voilà!Abordagem original (166 bytes):
fonte
&
não funcionou para alguns números, mas&&
funcionou. Obrigado.q=="0"|+q
é na verdade 1 byte menor queq>" "&&1/q
.05AB1E , 22 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
žhžMžN)UvćXJXíJ‡D?žMsåiR
era o que eu estava pensando em melhorar, mas não posso reduzirXJXiJ
o suficiente.DJsíJ
qual também não era muito eficaz.C, 196 bytes
Experimente online!
fonte
J , 132 bytes
Experimente online!
Um verbo explícito detalhado desta vez.
Explicação:
c=.(u:97+i.26)
faz uma lista azv=.'aeiou'
faz uma lista de vogais-.
remove as vogais da lista de letrasd=.u:48+i.10
faz uma lista de dígitosg=.;"0|.
um verbo utilitário para criar uma lista de pares em caixa de símbolos de substituiçãoa=.''
uma lista para armazenar o resultadowhile.*#y do.a=.a,{.y rplc(g c),(g d),g v
enquanto o comprimento da lista for> 0, pegue um símbolo, substitua-o e anexe-o ao resultadoy=.|.^:({:a e.v)}.y
solte um símbolo do início da lista e, se o símbolo for uma vogal, inverta a listaend.
termina owhile
loopa
retorna o resultadofonte
Limpo ,
221206198190186178 bytesExperimente online!
fonte
Retina , 78 bytes
Experimente online! O link inclui casos de teste. Explicação:
Troque cada personagem pelo seu equivalente.
Repita enquanto uma vogal permanece.
Envie o texto até a vogal.
Exclua o texto até a vogal.
Inverta o texto restante. Quando não há vogais restantes, isso é emitido implicitamente; no entanto, para os propósitos dos casos de teste, o cabeçalho gera o texto no final de cada linha.
fonte
Stax , 24 bytes
Executá-lo
Aqui está a representação ascii do mesmo programa.
Ele traduz cada classe de personagem primeiro e depois inicia um loop while. No loop, ele gera o próximo caractere e reverte condicionalmente o restante da string se uma vogal for encontrada.
fonte