Su tarea es tomar una cadena encriptada como entrada, y sacar la cadena desencriptada, para revelar su mensaje oculto.
Las cadenas, tanto de entrada como de salida, contendrán caracteres de esta lista de 64 caracteres ASCII (tenga en cuenta el espacio inicial):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Estos caracteres son números asignados, en el orden en que se enumeran arriba:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Entonces, el espacio es el número 0, !
es el número 1 y ~
es el número 63. Estos números se pueden representar en código binario de 6 bits:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
El cifrado es muy simple:
Lo usaré eC
para los caracteres encriptados y C
para los caracteres de la cadena original. C(n)
es el enésimo carácter de la cadena original, mientras que eC(n)
es el enésimo carácter de la cadena encriptada.
Usarás la representación binaria de 6 bits de los personajes. El primer personaje será eC(0) = not(C(0))
. A partir de ahí, todos los personajes serán eC(n) = xor(C(n),C(n-1))
.
Ejemplo:
Supongamos que la cadena de entrada es code
.
c
es el 38º carácter (indexado a cero), o100110
en binario. La versión encriptada tiene todos los bits invertidos, entonces011001 -> 25 -> '9'
(nuevamente, indexado a cero).o
es el personaje número 50, o110010
en binario.xor(100110, 110010) = 010100 = 20 = '4'
.d
es el 39º caracter, o100111
en binario.xor(100111, 110010) = 010101 = 21 = '5'
.e
es el personaje número 40, o101000
en binario.xor(101000, 100111) = 001111 = 15 = '/'
.
Entonces, si la cadena original es code
, la cadena cifrada se convertirá 945/
.
Casos de prueba:
945/
code
,&'8[14 =?;gp+% 2'@s&&c45/eg8?&
programming puzzles & code golf
;a$5$%0r?2@12dw6# lb-eg&519nt%ot=9$@es@96+?;ga" 4*)&ta56dp[?o#t%oh/"(&?#ee![,+,/+fe4"
a $150 reward will be given to those sending account and pin# to hackers@steal_id.com
~!#!'!#!/!#!'!#![!#!'!#!/!#!'!#!~!#!'!#!/!#!'!#![!#!'!#!/!#!'!#!
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~