Il tuo compito è prendere una stringa crittografata come input e produrre la stringa decrittografata per rivelare il suo messaggio nascosto.
Le stringhe, sia di input che di output, conterranno caratteri da questo elenco di 64 caratteri ASCII (notare lo spazio iniziale):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
A questi caratteri sono assegnati numeri, nell'ordine in cui sono elencati sopra:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Quindi, lo spazio è il numero 0, !
è il numero 1 ed ~
è il numero 63. Questi numeri possono essere rappresentati in codice binario a 6 bit:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
La crittografia è molto semplice:
Userò eC
per i caratteri crittografati e C
per i caratteri della stringa originale. C(n)
è l'ennesimo carattere della stringa originale, mentre eC(n)
è l'ennesimo carattere della stringa crittografata.
Utilizzerai la rappresentazione binaria a 6 bit dei caratteri. Il primo personaggio sarà eC(0) = not(C(0))
. Da lì, tutti i personaggi saranno eC(n) = xor(C(n),C(n-1))
.
Esempio:
Supponiamo che la stringa di input sia code
.
c
è il 38 ° carattere (zero indicizzato) o100110
in binario. La versione crittografata ha tutti i bit invertiti, quindi011001 -> 25 -> '9'
(di nuovo, zero indicizzato).o
è il 50 ° carattere, o110010
in binario.xor(100110, 110010) = 010100 = 20 = '4'
.d
è il 39 ° carattere, o100111
in binario.xor(100111, 110010) = 010101 = 21 = '5'
.e
è il 40 ° carattere, o101000
in binario.xor(101000, 100111) = 001111 = 15 = '/'
.
Quindi, se la stringa originale è code
, la stringa crittografata diventerà 945/
.
Casi 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|~