Votre tâche consiste à prendre une chaîne cryptée en entrée et à sortir la chaîne décryptée pour révéler son message caché.
Les chaînes, à la fois l'entrée et la sortie, contiendront des caractères de cette liste de 64 caractères ASCII (notez l'espace de tête):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Ces caractères se voient attribuer des numéros, dans l'ordre indiqué ci-dessus:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Ainsi, l'espace est le numéro 0, le !
numéro 1 et le ~
numéro 63. Ces nombres peuvent être représentés en code binaire 6 bits:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
Le cryptage est très simple:
Je vais utiliser eC
pour les caractères cryptés et C
pour les caractères de la chaîne d'origine. C(n)
est le nième caractère de la chaîne d'origine, tandis que eC(n)
le nième caractère de la chaîne cryptée.
Vous utiliserez la représentation binaire 6 bits des caractères. Le premier caractère sera eC(0) = not(C(0))
. De là, tous les personnages le seront eC(n) = xor(C(n),C(n-1))
.
Exemple:
Supposons que la chaîne d'entrée soit code
.
c
est le 38ème caractère (indexé zéro), ou100110
en binaire. La version chiffrée a tous les bits inversés, donc011001 -> 25 -> '9'
(encore une fois, zéro indexé).o
est le 50e caractère, ou110010
en binaire.xor(100110, 110010) = 010100 = 20 = '4'
.d
est le 39ème caractère, ou100111
en binaire.xor(100111, 110010) = 010101 = 21 = '5'
.e
est le 40ème caractère, ou101000
en binaire.xor(101000, 100111) = 001111 = 15 = '/'
.
Donc, si la chaîne d'origine est code
, la chaîne cryptée deviendra 945/
.
Cas de test:
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|~