Ihre Aufgabe ist es, eine verschlüsselte Zeichenfolge als Eingabe zu verwenden und die entschlüsselte Zeichenfolge auszugeben, um ihre versteckte Nachricht zu enthüllen.
Die Zeichenfolgen, sowohl die Eingabe als auch die Ausgabe, enthalten Zeichen aus dieser Liste mit 64 ASCII-Zeichen (beachten Sie das führende Leerzeichen):
!"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~
Diesen Zeichen werden Nummern in der Reihenfolge zugewiesen, in der sie oben aufgeführt sind:
! " # $ % & ...
0 1 2 3 4 5 6 ...
Das Leerzeichen ist also die Nummer 0, !
die Nummer 1 und ~
die Nummer 63. Diese Zahlen können im 6-Bit-Binärcode dargestellt werden:
: 0: 000000
!: 1: 000001
": 2: 000010
#: 3: 000011
.. ... ......
z: 61: 111101
|: 62: 111110
~: 63: 111111
Die Verschlüsselung ist sehr einfach:
Ich werde eC
für verschlüsselte Zeichen und C
für Zeichen der ursprünglichen Zeichenfolge verwenden. C(n)
ist das n-te Zeichen der ursprünglichen Zeichenfolge, während eC(n)
das n-te Zeichen der verschlüsselten Zeichenfolge ist.
Sie verwenden die 6-Bit-Binärdarstellung der Zeichen. Das erste Zeichen wird sein eC(0) = not(C(0))
. Von dort werden alle Charaktere sein eC(n) = xor(C(n),C(n-1))
.
Beispiel:
Nehmen wir an, die Eingabezeichenfolge ist code
.
c
ist das 38. Zeichen (null indiziert) oder100110
binär. In der verschlüsselten Version sind alle Bits umgedreht, also011001 -> 25 -> '9'
(wieder null indiziert).o
ist das 50. Zeichen oder110010
binär.xor(100110, 110010) = 010100 = 20 = '4'
.d
ist das 39. Zeichen oder100111
binär.xor(100111, 110010) = 010101 = 21 = '5'
.e
ist das 40. Zeichen oder101000
binär.xor(101000, 100111) = 001111 = 15 = '/'
.
Wenn es sich also um die ursprüngliche Zeichenfolge handelt code
, wird die verschlüsselte Zeichenfolge zu 945/
.
Testfälle:
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|~