Desafío
El desafío es encriptar una cadena dada, usando las reglas que se especifican a continuación. La cadena solo contendrá alfabetos en minúscula , dígitos y / o espacios en blanco .
Equivalente de un personaje
Ahora, en primer lugar, necesitaría saber cómo encontrar el "equivalente" de cada personaje.
Si el carácter es una consonante, esta es la forma de encontrar su 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 ejemplo: 'h' y 't' son equivalentes entre sí porque 'h', 't' están en la sexta posición desde el inicio y el final, respectivamente.
Se sigue el mismo procedimiento para encontrar el equivalente de vocales / dígitos. Usted enumera todas las vocales o los dígitos (comenzando desde 0) en orden y encuentra el equivalente.
A continuación se muestra la lista de los equivalentes de todos los 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
Reglas de cifrado
1) Empiezas a moverte desde la izquierda y vas hacia la derecha.
2) Si el carácter es una consonante / dígito, se toma su equivalente y si se trata de un espacio en blanco, se toma un espacio en blanco.
3) Si el personaje es una vocal, tomas su equivalente y comienzas a moverte en la dirección opuesta. Por ejemplo, si se mueve hacia la derecha y encuentra una vocal, encripte ese carácter, luego salte al carácter sin encriptar más a la derecha y comience a encriptar en la dirección izquierda, y viceversa.
4) No debes considerar a un personaje en la misma posición dos veces. Se deben seguir los pasos hasta que se cubran todos los caracteres de la entrada.
5) El número total de caracteres en la entrada (incluidos los espacios en blanco) debe ser igual al número total de caracteres en la salida.
Tenga en cuenta que los caracteres cifrados aparecen en la salida en el orden en que se cifraron.
Ahora déjame encriptar una cadena para ti.
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"
Ejemplos
"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 "
También puede optar por utilizar alfabetos en mayúsculas en lugar de minúsculas.
Puntuación
Este es el código de golf , por lo que gana el código más corto.
fuente
Respuestas:
JavaScript (Node.js) ,
173...166156...124123 bytes-28 bytes Gracias Arnauld
Pruébalo en línea!
En la primera iteración
String
, se cambiará aArray
, y las iteraciones posteriores continuarán utilizándoseArray
. Voilà!Enfoque original (166 bytes):
fuente
&
no funcionó para algunos números pero&&
funcionó. Gracias.q=="0"|+q
en realidad es 1 byte más corto queq>" "&&1/q
.05AB1E , 22 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
žhžMžN)UvćXJXíJ‡D?žMsåiR
era lo que estaba pensando para mejorar, pero no puedo reducirXJXiJ
lo suficiente.DJsíJ
que tampoco fue muy efectiva.C, 196 bytes
Pruébalo en línea!
fuente
J , 132 bytes
Pruébalo en línea!
Un verbo explícito detallado esta vez.
Explicación:
c=.(u:97+i.26)
hace una lista azv=.'aeiou'
hace una lista de vocales-.
elimina las vocales de la lista de letrasd=.u:48+i.10
hace una lista de dígitosg=.;"0|.
un verbo de utilidad para crear una lista de pares en caja de símbolos de reemplazoa=.''
una lista para almacenar el resultadowhile.*#y do.a=.a,{.y rplc(g c),(g d),g v
mientras la longitud de la lista es> 0, tome un símbolo, reemplácelo y agréguelo al resultadoy=.|.^:({:a e.v)}.y
suelte un símbolo desde el principio de la lista y si el símbolo es una vocal, invierta la listaend.
termina elwhile
cicloa
devuelve el resultadofuente
Limpio ,
221206198190186178 bytesPruébalo en línea!
fuente
Retina , 78 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Cambia cada personaje con su equivalente.
Repita mientras quede una vocal.
Salida del texto hasta la vocal.
Eliminar el texto hasta la vocal.
Invierta el texto restante. Cuando no quedan vocales, esto se emite implícitamente, sin embargo, a los fines de los casos de prueba, el encabezado genera el texto al final de cada línea.
fuente
Stax , 24 bytes
Ejecutarlo
Aquí está la representación ascii del mismo programa.
Traduce primero cada clase de personaje, luego comienza un ciclo while. En el bucle, genera el siguiente carácter e invierte condicionalmente el resto de la cadena si se encuentra una vocal.
fuente